本文主要是介绍C++基础---友元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
友元概念
友元函数
定义:
friend<数据类型><友元函数名>(参数列表)
#include<iostream>
using namespace std;//定义友元函数
class Rectangle
{
private:double length;double width;
public:Rectangle(double l,double w):length(l),width(w){}friend double area(Rectangle &Rec); //定义友元
};
//友元实现
double area(Rectangle &Rec)
{return Rec.length*Rec.width;
}
int main()
{Rectangle Rect(12.0,2.1);cout<<"The area is "<<area(Rect);return 0;
}
友元成员
#include<iostream>
#include<string.h>using namespace std;class Boy; //提起声明class Girl
{
private:char *name;int age;
public:Girl(char *n,int num);void display(Boy &boy);~Girl();
};Girl::Girl(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Girl::~Girl(){delete name;}class Boy
{
private:char* name;int age;
public:Boy(char *n,int a);friend void Girl::display(Boy &b); //声明友元函数~Boy();
};Boy::Boy(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Boy:: ~Boy(){delete name;}
void Girl::display(Boy &b)
{cout<<"Girl\'s name: "<<name <<" age :"<<age<<endl;cout<<"Boy\'s name: "<<b.name <<" age :"<<b.age<<endl;
}int main()
{Girl g("helinqian",28);Boy b("yuanqianqian",27);g.display(b);return 0;
}
友元类
友元类一般形式:
friend class<友元类名>
using namespace std;class Boy; //提起声明class Girl
{
private:char *name;int age;
public:Girl(char *n,int num);void display(Boy &boy);~Girl();
};Girl::Girl(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Girl::~Girl(){delete name;}class Boy
{
private:char* name;int age;
public:Boy(char *n,int a);friend class Girl; //声明类girl是类boy的友元函数~Boy();
};Boy::Boy(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Boy:: ~Boy(){delete name;}
void Girl::display(Boy &b)
{cout<<"Girl\'s name: "<<name <<" age :"<<age<<endl;cout<<"Boy\'s name: "<<b.name <<" age :"<<b.age<<endl;
}int main()
{Girl g("helinqian",28);Boy b("yuanqianqian",27);g.display(b);return 0;
}
注意事项:
友元关系不能被继承。
友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
友元可以访问类的私有成员。
只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。
友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
友元可以访问类的私有成员。
只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。
这篇关于C++基础---友元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!