友元类
/*
* @Author: sottxiong
* @Date: 2019-11-20 11:53:57
* @Last Modified by: sottxiong
* @Last Modified time: 2019-11-20 12:24:14
友元类
*/
#include <iostream>
class Girl;
class Boy
{
friend Girl;
public:
Boy(float salary,float change)
:salary(salary),change(change)
{
};
~Boy(){};
private:
float salary;//薪水
float change;//零用钱
};
class Girl
{
public:
Girl(float salary,float change)
:salary(salary),change(change)
{
};
~Girl(){};
//零花钱的对比
float contrast(Boy boy){
return this->change - boy.change;
}
private:
float salary;
float change;
};
int main(int argc, char const *argv[])
{
Girl linda(30000,20000);
Boy simon(10000,8000);
std::cout<<linda.contrast(simon)<<std::endl; //12000
return 0;
}
如果用g++直接编译的话,会报错:
friend git:(master) ✗ g++ class.cpp
class.cpp:12:9: warning: unelaborated friend declaration is a C++11 extension;
specify 'class' to befriend 'Girl' [-Wc++11-extensions]
friend Girl;
^
class
1 warning generated.
clang++ -std=c++11 -g -o main class.cpp
友元的优缺点
- 优点:提高了程序的运行效率
- 缺点:破坏了类的封装性
- 友元函数没有this指针
- 友元类相当于所有的函数都是友元函数
- 友元关系不能被继承
- 友元关系不具备传递性:a是b的朋友,b是c的朋友,a不一定是c的朋友
- 友元关系是单项的:a把b当成朋友,b不一定把a当成朋友,a吧b当成女朋友,b可不一定吧a当成男朋友,由此可见设计c++的人,对生活还是蛮有体会的,程序、设计思想也来源于生活