C++---友元函数和友元类

友元函数

为了程序的效率,需要让一个函数去访问类里面的私有部分;
友元函数本身不属于任何类;
友元函数是封装的例外;
友元函数的定义与使用
1.为了在类的定义中对友元加以声明,需要加上friend关键字;
eg:

class CComplex//复数类
{
    
    
private:
    float r,i;
public:
    CComplex(float x=0,float y=0);
    ~CComplex();
    friend void PrintComplex(CComplex c);
};

void PrintComplex(CComplex c)//实现在类的外部
{
    
    
    cout<<c.r<<"+"<<c.i<<"i"<<endl;
}

2.友元函数可以成为多个类的友元函数,成为某个类的友元函数后,可以访问该类的所有成员函数;
3.友元函数的调用与一般函数的调用方式,原理一致;
4.C++不允许析构函数,构造函数,虚函数成为友元函数;

友元类:

如果类A被说明为另一个类B的友元类,则B的成员可以被A使用;
友元类定义:

friend class 类名;

友元类实例:

#include <iostream>
#include<string.h>
using namespace std;

class CData
{
    
    
public:
    CData(char *str,int i);
private:
    friend class CShow;//说明友元类CShow;
    char *name;
    int age;
};
CData::CData(char *str,int i):age(i)//注意初始化age的方式!!!
{
    
    
    name=new char(strlen(str)+1);
    strcpy(name,str);
}

class CShow//友元类CShow用来show
{
    
    
public:
    void show(CData x);
};
void CShow::show(CData x)//输出信息
{
    
    
    cout<<"name:"<<x.name<<endl;
    cout<<"age:"<<x.age<<endl;
}

int main()
{
    
    
    CData ob1("liding",21);
    CShow show1;
    show1.show(ob1);
    return 0;
}

注意:友元关系不是互逆的,也不是传递的!

猜你喜欢

转载自blog.csdn.net/timelessx_x/article/details/114591618