C++笔记九十四:类模板中成员函数的定义位置

论坛 期权论坛 期权     
依法编程   2019-7-28 23:29   3243   0
依法编程 Autocodes   
欢迎各位小伙伴关注”依法编程“,一起交流
我自己很清楚的意识到这次笔记的语言描述别人是看不懂的,后期我了解的多了再完善!

[h3]、前言[/h3]在上面的笔记中,谈到了类模板,我们定义类模板时,如果有成员函数,成员函数的定义位置有三种:
1、成员函数的声明和和成员函数的实现都放在类内部,作为内联函数;
2、所有类模板中的函数,函数的声明放在类的内部,函数的实现放在类的外部,声明和实现放在同一个.cpp文件中;
3、成员函数的声明放在类的内部,类的声明放在.h文件中;成员函数的实现放在类的外部,函数实现放在.cpp文件中;
声明笔记六十四中,我们谈到友元函数应用场景,用左右两个参数类型不同时的操作符重载友元函数提供了一种访问类内私有成员的机制,这种机制打破了类的封装性,因此我们建议除了操作符重载以外地方不要使用友元函数
滥用友元函数会带来恐怖的麻烦!
我目前对友元函数的理解就是这样的,关于友元函数的滥用以及如何给滥用友元函数带来的糟糕后果收场问题,我也不想多说,浪费时间,等我系统学完一遍有了更加清晰地脉络再说。
因此在接下来类模板中函数定义位置的说明就不包含滥用友元函数,当然友元函数用于重载操作符的函数还是要说到的。并且,友元函数实现操作符重载,必定是要放在类的外部的,友元函数是全局函数,因此我也不想去按照有的教程的讲解,将友元函数前面加上friend关键字然后放在类的内部,这样是可以编译运行通过的,但是目前的不安全性我还不清楚。

[h3]成员函数的声明和实现分开且位于同一个文件[/h3]有关成员函数的声明和实现位于类的内部的问题就不用说了,直接说一下成员函数的声明位于类的内部,实现位于类的外部,但声明和实现位于同一个.cpp文件中。
对于成员函数又涉及到四种:
【1】 构造和析构函数
【2】 普通成员函数
【3】 成员函数实现操作符重载
【4】 友元(全局)函数实现操作符重载
针对这些函数的情况,看程序分析。
#include
using namespace std;

//类模板
template
class Complex
{
//友元函数实现操作符重载
friend ostream& operatora=a;
this->b=b;
}

//普通函数的实现写在类的外部
template
void Complex::printCom()
{
cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:20
帖子:4
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP