博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++模板类中友元函数的写法
阅读量:4979 次
发布时间:2019-06-12

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

首先,已声明好的类Triangle

file://Triangle.htemplate
class Triangle{
public: Triangle(T width,T height);private: T width; T height;};

再在Triangle.hpp内补全构造函数

file://Triangle.hpptemplate
Triangle
::Triangle(T width,T height){
this->width=width; this->height=height;}

------------------------------------------------------------------------

  以上为准备工作,接下来才是主要内容

----------------------------------------------------------------------

一.GCC与VC++都可以编译成功的版本

 

1.友元函数为重载函数

操作流程:

1) 在模板内添加友元函数声明(记住:因为友元函数也是函数模板,所以需要在函数名后加<T>)

file://Triangle.htemplate
class Triangle{
public: Triangle(T width,T height);   friend ostream& operator<<
(ostream& os,Triangle
& t); private: T width; T height;};

2)定义友元函数

file://Triangle.hpptemplate
//这个T可以为其他代号 因为这是一个崭新的函数模板ostream& operator<<(ostream& os,Triangle
& t){ os<<"高度为"<
<<"宽度为"<

 

2.普通友元函数

操作流程一共三步,第一步是在类模板定义前声明类模板和友元函数的函数模板,接下来两部与友元重载函数的两部一致

1)声明类模板和友元函数的函数模板+2)类模板内部声明友元函数

file://Triangle.htemplate 
class Triangle;template
void showSize(Triangle
& t);template
class Triangle{public: Triangle(T width,T height); friend void showSize
(Triangle
& t);private: T width; T height;};

3)定义友元函数的函数模板

file://Triangle.hpptemplate
void showSize(Triangle
& t){ cout<<"the size of triangle is "<

 

总结:

重载函数与一般友元函数的写法区别:如果是模板类中的普通友元函数,那需要在模板类定义前声明一下模板类以及模板函数,如果是重载函数则不需要。

 

二.只有VC++编译器可以编译成功的版本

 

如果你使用的是VS这种IDE,那么不用管是一般友元函数还是重载函数 ,写法都一样

1)现在模板类中声明友元函数

file://Triangle.htemplate
class Triangle{public: Triangle(T width,T height); template
friend ostream& operator<<(ostream& os,Triangle
& t); template
friend void showSize(Triangle
& t);private: T width; T height;};

2)定义(定义与 一. 中一致,这里就不写了)

 

 

 

 

整体总结,

一,优点:多种c++编译器都可以编译成功。缺点,一般友元函数写法与友元重载函数写法不同

二,优点:友元函数写法就一种。缺点,只可以在vs上的vc++编译器编译成功。

 

我个人建议还是使用一。

 

转载于:https://www.cnblogs.com/kiik/p/how_to_coding_friend_function_in_cpp_template_class.html

你可能感兴趣的文章
12天学好C语言——记录我的C语言学习之路(Day 2)
查看>>
某大型银行深化系统之十:服务层之二
查看>>
LookUpEdit - How update binding source immediately after selection?
查看>>
使用HandleErrorAttribute处理异常
查看>>
Node 之 Express 学习笔记 第二篇 Express 4x 骨架详解
查看>>
Educational Codeforces Round 64 (Rated for Div. 2) (线段树二分)
查看>>
疯狂指南针之一周计划(整理——郑云飞)
查看>>
js获取服务端IP及端口及协议
查看>>
MongoDB 集合操作命令-3
查看>>
Save a bricked Samsung Note 3 and do extraction
查看>>
PO VO BO DTO POJO DAO的解释
查看>>
夺命雷公狗---DEDECMS----32dedecms电影网评价星星功能的实现
查看>>
Python hashlib
查看>>
Linux下gcc的安装
查看>>
python之路-类、socket编程
查看>>
在 ML2 中配置 OVS vlan network - 每天5分钟玩转 OpenStack(136)
查看>>
J.U.C并发框架源码阅读(五)Semaphore
查看>>
微信小程序_(视图)简单的scroll-view容器
查看>>
滤波、形态学腐蚀与卷积(合集)
查看>>
spring mvc 单元测试示例
查看>>