友元类

/*
* @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++的人,对生活还是蛮有体会的,程序、设计思想也来源于生活

results matching ""

    No results matching ""