1. //类模版与友元函数
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. template<typename T>
  6. class Complex{
  7. public:
  8. Complex(T a,T b);
  9. void Print() const//const修饰的是this指针
  10. {
  11. cout << this->Real << ":" <<this->Image<< endl;
  12. }
  13. /*
  14. 强调:在类模板里实现友元函数 不可以写在类的外部,只能在类的内部实现,否则编译器报错
  15. 本质原因是类模板编译了2次,导致对友元函数也编译了2次 所以c++编译器不认可写在类模板外面的友元函数
  16. 对于普通类则没有这个问题
  17. */
  18. //友元函数
  19. friend Complex operator+(Complex &c1, Complex &c2){
  20. Complex tempc(c1.Real + c2.Real, c1.Image + c2.Image);
  21. return tempc;//匿名对象
  22. }
  23. //成员函数---成员函数跟友元函数不同,可以在类外面实现
  24. Complex operator-(Complex &c2);
  25. private:
  26. T Real, Image;
  27. };
  28.  
  29. template<typename T>
  30. Complex<T>::Complex(T a, T b){
  31. this->Real = a;
  32. this->Image = b;
  33. }
  34.  
  35. template<typename T>
  36. Complex<T> Complex<T>::operator-(Complex<T> &c2){
  37. Complex tempc(this->Real - c2.Real, this->Image - c2.Image);
  38. return tempc;//匿名对象
  39. }
  40.  
  41. void ProtectA(){
  42. Complex<int> c1(,);
  43. //c1.Print();
  44. Complex<int> c2(, );
  45. //运算符重载 + 友元函数实现
  46. Complex<int> c3 = c1 + c2;
  47. c3.Print();
  48. /*
  49. 首先承认运算符重载是一个函数,写出函数名
  50. operator+
  51. 然后根据操作数,写出参数列表
  52. operator+(Complex<int> &c1,Complex<int> &c2)
  53. 最后根据接收对象决定返回值,实现函数
  54. Complex<int> operator+(Complex<int> &c1,Complex<int> &c2)
  55. 在类的内部可以省略参数列表,因为类的声明不分配内存,不需要确定类的大小
  56. */
  57. Complex<int> c4 = c2 - c1;
  58. /*
  59. 首先承认运算符重载是一个类内部函数,写出函数名
  60. operator-
  61. 然后根据操作数,写出参数列表
  62. c1.operator-(Complex<int> &c2);
  63. 最后根据接收对象决定返回值,实现函数
  64. Complex<int> c1.operator-(Complex<int> &c2);
  65. 在类的内部可以省略参数列表,因为类的声明不分配内存,不需要确定类的大小
  66. */
  67. c4.Print();
  68.  
  69. }
  70.  
  71. void main(){
  72. ProtectA();
  73. system("pause");
  74. }

C++ 类模板二(类模版与友元函数)的更多相关文章

  1. singleton 类模板限制类只能定义一个对象

    singleton 类模板限制类只能定义一个对象 singleton 类模板限制类只能定义一个对象 singleton 类模板限制类只能定义一个对象 ???

  2. C++Template(类模板二)

    namespace _myspace{ template<typename T, typename U> class TC { public: TC() { cout << & ...

  3. C++模板类中友元函数的写法

    首先,已声明好的类Triangle file://Triangle.h template<class T> class Triangle{ public: Triangle(T width ...

  4. gcc的bug? c++模板类中友元函数的訪问权限问题

    原文地址:http://stackoverflow.com/q/23171337/3309790 在c++中,模板类中能够直接定义一个友元函数.该函数拥有訪问该模板类非public成员的权限. 比方: ...

  5. C++ 类模板三(类模版中的static关键字)

    //类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器 ...

  6. C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...

  7. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

  8. C++STL - 类模板

    类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板   1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...

  9. 初步C++类模板学习笔记

    类模板 实现:在上课时间的定义给它的一个或多个参数,这些参数代表了不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定參数, 由编 ...

随机推荐

  1. 30个iPhone健康应用帮助你保持身体健康

    来源:GBin1.com 技 术进步的最大缺陷是,现在大部分人花费大量时间在他们的电脑前和移动设备上.他们没有任何时间锻炼和顾及他们的健康.这些科技产品让我们变得慵 懒,甚至 让我们愿意花费闲暇的时间 ...

  2. C# Meta Programming - Let Your Code Generate Code - 利用反射重写自动的ToString()

    我们在写一些Model的时候,经常会重写ToString,为了在控制台中进行打印或者更好的单元测试. 但是,如果Model的字段非常多的时候,如此简单的重复劳动经常会变成一件令人头痛的事情,因为大家 ...

  3. 流媒体播放mime类型添加

    .m3u8 application/x-mpegURL.ts video/MP2T

  4. Tomcat启动报错:java.net.BindException: Cannot assign requested address: JVM_Bind

    Tomcat启动报错:java.net.BindException: Cannot assign requested address: JVM_Bind Tomcat Cannot assign re ...

  5. 建站笔记1:centos6.5下安装mysql

    近期买了个域名,想要玩玩自己建站点:接下来遇到的问题都会一次记录下来.以备自己以后复习查看: 首先建站方案选择: wordPress +centos6.5 +mysql; server买的:搬瓦工最低 ...

  6. Linux配置虚拟主机后,只能访问到主页怎么办?

    Linux配置虚拟主机后,只能访问到主页怎么办? 今天配置了lamp后,添加了一个虚拟主机,配置http.conf后,增加虚拟主机,测试访问发现只有域名下能访问,ljt.com但是域名下所有的都访问不 ...

  7. Zoho CEO:云计算泡沫巨大 Salesforce仅仅是新的Siebel

    最近Zoho CEO - Sridhar Vembu接受科技博客媒体Diginomica的专訪,从独特的眼光和见解.讲述了云计算行业环境.SaaS公司的生存状态.商业观念以及Zoho的商业模式. Sr ...

  8. 【Linux】监控系统的状态

    1.w命令 w命令是一个很强大的命令,该命令显示的信息比较丰富.以下是我的虚拟机w命令的一个展示 从上图我们可以看到: 第一行从左面开始显示的信息依次为:时间.系统运行时间.登陆用户数.平均负载 第二 ...

  9. Random.org -- 真正的随机数生成器

    接触过程序设计的人一定对随机数不陌生.随机数的用途非常广,比方在測试.分布和统计程序.游戏中. 大多数编程语言也提供了随机数库.能够方便的使用. 只是从严格意义上来讲,这些程序生成的随机数并非真正的随 ...

  10. 让网页自动调用双核浏览器的极速模式(<meta name="renderer" content="webkit">)

    背景:最近做了一个网站,传单服务器之后,每次打开都是乱码,不对啊,我在本地测得明明是排版很整齐啊,然后发现,360用的是“兼容模式”打开的,这就尴尬了,用户一打开就是乱码,这用户体验得有多差!用户可不 ...