//类模版与友元函数
#include<iostream>
using namespace std; template<typename T>
class Complex{
public:
Complex(T a,T b);
void Print() const//const修饰的是this指针
{
cout << this->Real << ":" <<this->Image<< endl;
}
/*
强调:在类模板里实现友元函数 不可以写在类的外部,只能在类的内部实现,否则编译器报错
本质原因是类模板编译了2次,导致对友元函数也编译了2次 所以c++编译器不认可写在类模板外面的友元函数
对于普通类则没有这个问题
*/
//友元函数
friend Complex operator+(Complex &c1, Complex &c2){
Complex tempc(c1.Real + c2.Real, c1.Image + c2.Image);
return tempc;//匿名对象
}
//成员函数---成员函数跟友元函数不同,可以在类外面实现
Complex operator-(Complex &c2);
private:
T Real, Image;
}; template<typename T>
Complex<T>::Complex(T a, T b){
this->Real = a;
this->Image = b;
} template<typename T>
Complex<T> Complex<T>::operator-(Complex<T> &c2){
Complex tempc(this->Real - c2.Real, this->Image - c2.Image);
return tempc;//匿名对象
} void ProtectA(){
Complex<int> c1(,);
//c1.Print();
Complex<int> c2(, );
//运算符重载 + 友元函数实现
Complex<int> c3 = c1 + c2;
c3.Print();
/*
首先承认运算符重载是一个函数,写出函数名
operator+
然后根据操作数,写出参数列表
operator+(Complex<int> &c1,Complex<int> &c2)
最后根据接收对象决定返回值,实现函数
Complex<int> operator+(Complex<int> &c1,Complex<int> &c2)
在类的内部可以省略参数列表,因为类的声明不分配内存,不需要确定类的大小
*/
Complex<int> c4 = c2 - c1;
/*
首先承认运算符重载是一个类内部函数,写出函数名
operator-
然后根据操作数,写出参数列表
c1.operator-(Complex<int> &c2);
最后根据接收对象决定返回值,实现函数
Complex<int> c1.operator-(Complex<int> &c2);
在类的内部可以省略参数列表,因为类的声明不分配内存,不需要确定类的大小
*/
c4.Print(); } void main(){
ProtectA();
system("pause");
}

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. Python游戏引擎开发(七):绘制矢量图

    今天来完毕绘制矢量图形. 没有读过前几章的同学,请先阅读前几章: Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗体以及重绘界面 Python游戏引擎开发(三):显示图片 P ...

  2. hdu5293(2015多校1)--Tree chain problem(树状dp)

    Tree chain problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  3. 一个Tomcat配置参数引发的血案

    转载:https://mp.weixin.qq.com/s/3IuTcDCTB3yIovp6o_vuKA 一.现象 有用户反馈访问PC首页偶尔会出现白页情况,也偶尔会收到听云的报警短信 二.监控(听云 ...

  4. dubbo-monitor安装监控中心,管理控制台安装网页一直访问不到,解决bug的方式记录

    问题再现 第一步,重启机器 第二步,按照dubbo-monitor需要开启的服务,顺序逐一进行启动,之前的推翻全部重新再走一遍就通了,千万不能死磕...很浪费时间.... 通过打印日志追踪问题的所在. ...

  5. SDL 学习及相关API

    SDL_PeepEvents() 在事件队列中搜索特定类型的事件. int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventacti ...

  6. onethink 密码加密方式详解

    /** * 系统非常规MD5加密方法 * @param string $str 要加密的字符串 * @return string */ function think_ucenter_md5($str, ...

  7. es6常用数组操作及技巧汇总

    定义数组 const array = [1, 2, 3]; // 或者 const array = new Array(); array[0] = '1'; 检测数组 Array.isArray([] ...

  8. Opengl ES 1.x NDK实例开发之六:纹理贴图

    开发框架介绍请參见:Opengl ES NDK实例开发之中的一个:搭建开发框架 本章在第三章(Opengl ES 1.x NDK实例开发之三:多边形的旋转)的基础上演示怎样使用纹理贴图,分别实现了三角 ...

  9. 关于Assembly.LoadFrom和Assembly.LoadFile的区别

    区别: 1.Assembly.LoadFile只载入相应的dll文件,比如Assembly.LoadFile("a.dll"),则载入a.dll,假如a.dll中引用了b.dll的 ...

  10. Ooui:在浏览器中运行.NET应用 Ooui.Wasm:浏览器中的.NET

    在过去数年中,桌面应用开发人员一直处境艰难,因为人们的主要关注点聚焦于Web和移动应用.由于Microsoft未来Windows平台的计划未定,并且UWP应用也没有突破性进展,因此技术落伍的责任也不应 ...