友元作为C++独有的属性,有哪些作用呢,一块来瞅瞅吧。 友元,运算符是friend,顾名思义,就是朋友的意思,朋友自然权力大一点,所以就能访问私有及保护的成员。 根据类型不同,友元可以分为: 1.友元全局函数; 2.友元类; 3.友元成员函数。 具体代码如下:
class GoodFriend2;
class Person {
public:
friend void visit();
friend class GoodFriend;
string Liviroom;
Person();
private:
string Bedroom;
};
Person::Person()
{
Liviroom = "客厅";
Bedroom = "卧室";
}
void visit()
{
Person p;
cout << "参观我的: " << p.Liviroom << " 参观我的:" << p.Bedroom << endl;
}
class GoodFriend {
public:
Person* p;
GoodFriend();
void visit();
~GoodFriend();
};
GoodFriend::GoodFriend()
{
p = new Person;
}
GoodFriend::~GoodFriend()
{
if (p != NULL)
delete p;
}
void GoodFriend::visit()
{
cout << "参观我的: " << p->Liviroom << " 参观我的: " << p->Bedroom << endl;
}
int main()
{
visit();
GoodFriend p;
p.visit();
}
上述代码为友元类和友元类的写法,其实就是谁是友元,讲他的第一行复制到类中,前面加friend运算符,后面加分号。 友元成员函数的如下:
class Building;
class GoodFriend {
public:
Building* b;
GoodFriend();
void visit();
~GoodFriend();
};
class Building {
friend void GoodFriend::visit();
public:
string Livingroom;
Building()
{
Livingroom = "客厅";
Bedroom = "卧室";
}
private:
string Bedroom;
};
GoodFriend::GoodFriend()
{
b = new Building;
}
GoodFriend::~GoodFriend()
{
if (b != NULL)
delete b;
}
void GoodFriend::visit()
{
cout << "参观我的: " << b->Livingroom << " 参观我的: " << b->Bedroom << endl;
}
void main()
{
GoodFriend p;
p.visit();
}
友元破坏了封装性,一方面他可以让我们访问到私有和保护权限的成员,但也有可能带来意想不到的错误。
|