博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况
阅读量:6305 次
发布时间:2019-06-22

本文共 2413 字,大约阅读时间需要 8 分钟。

在一般友元函数的前面加上 template<typename T),注意在函数的声明和定义处都要加这个模板

例如:

//模板类,长方体类template 
class Rectangle{ ///*重载基类的输入输出运算符*/ //template
//friend std::istream& operator >> (std::istream& in, Rectangle
& item); //template
//friend std::ostream& operator << (std::ostream& out, const Rectangle
& item);protected: //受保护的成员 ElementType length; //长方体的长,在类内部可以直接使用模板定义的数据类型 ElementType width; //长方体的宽 RectangleNo myNo; //长方形的序号,嵌套类对象作为Rectangle类的一个数据成员};

友元函数的定义部分也要加上template<typename T>这个模板

/*重载输入运算符*/template 
std::istream& operator >> (std::istream& in, Rectangle
& item){ in >> item.length >> item.width >> item.myNo.no; return in;}/*重载输出运算符*/template
std::ostream& operator << (std::ostream& out, const Rectangle
& item){ out << "length = " << item.length << " width = " << item.width << " No = " << item.myNo.no; return out;}

如果不知道怎么声明模板类的友元函数,可以在类内部用函数实现你想用友元函数实现的功能,

然后在类外的友元函数中调用这个类内函数,就可以达到相同的效果

例如:上面那个输入输出的友元函数可以改成:

//模板类,长方体类template 
class Rectangle{public: //读取长方形 void read(std::istream& in); //输出长方形 void display(std::ostream& out)const ;protected: //受保护的成员 ElementType length; //长方体的长,在类内部可以直接使用模板定义的数据类型 ElementType width; //长方体的宽 RectangleNo myNo; //长方形的序号,嵌套类对象作为Rectangle类的一个数据成员};

在类外实现read和display函数后,在类外的友元函数中调用这两个函数即可

template
void MyRectangle
::read(std::istream& in){ cout << "Please enter the length and width of " << myNo.no << endl; in >> length >> width;}template
void MyRectangle
::display(std::ostream& out) const{ out << "the " << myNo.no << " Rectangle's length = " << length << " width = " << width;}template
std::ostream& operator << (std::ostream& out, const Rectangle
& item){ item.display(out); return out;}template
std::istream& operator >> (std::istream& in, Rectangle
& item){ item.read(in); return in;}

 

派生类友元函数对基类的成员使用情况:

派生类友元函数可以使用基类中非private成员,可以使用基类的protected和public成员

基类的成员函数(包括友元函数)只能操作派生类对象中基类那部分。

如果派生类中有函数和基类同名,那么派生类对象会调用派生类中的那个函数,而不是对象的基类部分调用基类函数,派生类部分调用派生类函数。

转载于:https://www.cnblogs.com/hi3254014978/p/9809591.html

你可能感兴趣的文章
bug处理手册(长期更新)
查看>>
saltstack常用命令
查看>>
【转】阿里面试经历及总结(数据研发、Java研发方向)
查看>>
JAVA NIO 网络阻塞IO与非阻塞IO
查看>>
Linux-查找命令的使用情况(持续更新)
查看>>
How to install webmin on ubuntu 12.04 (Precise)...
查看>>
Python 读取文件示例[一]
查看>>
第24讲 js案例讲解 js自定义函数
查看>>
SFB 项目经验-33-分配公网证书 For 负载均衡-Keepalived-Haproxy
查看>>
jquery mobile左右滑动切换页面
查看>>
[每日一题] OCP1z0-047 :2013-08-11 描述层次查询(hierarchical query)........................31...
查看>>
Shell命令:echo 命令详解
查看>>
尼姆博弈
查看>>
【推荐】程序员必读的三十本经典巨作
查看>>
DES函数加密算法
查看>>
我的友情链接
查看>>
SEO工作之友好引导(二)
查看>>
ifcfg/ip/ss命令详解
查看>>
关于 Flume NG
查看>>
北电交换机常用配置
查看>>