相对Java而言,友元是C++中特有的一种元素,再加上《C++ Primer》也并没有太具体的样例,所以刚接触这个概念的时候懵了非常久,即是自己总结一下,也希望能帮到大家,以下来讲讲友元的使用方法和一些注意的地方。
操作:
1)在MyFriend类中,将Father类定义成友元
2)写一个Son类继承自Father类
3)在Father类和Son类的构造函数中分别创建MyFriend对象,并定义其内部的三个变量
4)在MyFriend类的构造函数中创建Father对象。并定义其内部的三个变量
结果:
1)Father类中创建的MyFriend对象同意直接訪问MyFriend类中全部变量
2)Son类中创建的MyFriend对象仅仅同意直接訪问MyFriend类中Public变量
3)由第二点可知,友元关系无法继承
4)MyFriend类中创建的Father对象仅仅同意直接訪问Father类中的Public变量
5)由第四点可知,友元关系是单向的。即A为B友元,B并非A的友元。须要另外单独定义
MyFriend.h
#include "Father.h"
class MyFriend{
friend class Quote; //友元类直接这样定义就OK了
public:
MyFriend(){
Father *p = new Father();
p->var1 = 1;
p->var2 = 1;
p->var3 = 1;
}
int var1;
protected:
int var2;
private:
int var3;
};Father.h
#include "MyFriend.h"
class Father{
public:
Father(){
MyFriend *p = new MyFriend();
p->var1 = 1;
p->var2 = 1;
p->var3 = 1;
};
int var1;
protected:
int var2;
private:
int var3;
}Son.h
#include "MyFriend.h"
class Son : Father{
Son(){
MyFriend *p = new MyFriend();
p->var1 = 1;
p->var2 = 1;
p->var3 = 1;
};
}