详解C++ friend关键字 (二)

2014-11-24 12:01:41 · 作者: · 浏览: 1
m_name = name;
}

void Function(MyClass_B &myB);

private:
string m_name;
};

//B 类
class MyClass_B
{
public:
MyClass_B(string name)
{
m_name = name;
}

//友元函数声明,注意和普通函数的区别
friend void MyClass_A::Function(MyClass_B &myB);

private:
string m_name;
};

//函数定义
void MyClass_A::Function(MyClass_B &myB)
{
cout< }

//测试代码
int main(int argc,char* argv[])
{
MyClass_A testA("Class A");
MyClass_B testB("Class B");

testA.Function(testB);

return 0;
}
#include
using namespace std;

class MyClass_B;

//A 类
class MyClass_A
{
public:
MyClass_A(string name)
{
m_name = name;
}

void Function(MyClass_B &myB);

private:
string m_name;
};

//B 类
class MyClass_B
{
public:
MyClass_B(string name)
{
m_name = name;
}

//友元函数声明,注意和普通函数的区别
friend void MyClass_A::Function(MyClass_B &myB);

private:
string m_name;
};

//函数定义
void MyClass_A::Function(MyClass_B &myB)
{
cout< }

//测试代码
int main(int argc,char* argv[])
{
MyClass_A testA("Class A");
MyClass_B testB("Class B");

testA.Function(testB);

return 0;
}
我们可以看到,B 类,对 A 类其中的一个函数开放,其结果是这个函数可以访问 B 类的所有元素。

四. 整个类也可以是另一个类的友元


友类的每个成员函数都可以访问另一个类的所有成员。


示例代码如下:

[cpp] #include
using namespace std;

//类 A
class MyClass_B;

class MyClass_A
{
public:
MyClass_A(string name)
{
m_name = name;
}

//友元类声明
friend class MyClass_B;

private:
string m_name;
};

//类 B
class MyClass_B
{
public:
MyClass_B(string name)
{
m_name = name;
}

void Display(MyClass_A &myA);

private:
string m_name;
};

//成员函数
void MyClass_B::Display(MyClass_A &myA)
{
cout<
MyClass_A test("test");

cout< }

//测试代码
int main(int argc,char* argv[])
{
MyClass_A testA("Class A");
MyClass_B testB("Class B");

testB.Display(testA);

return 0;
}
#include
using namespace std;

//类 A
class MyClass_B;

class MyClass_A
{
public:
MyClass_A(string name)
{
m_name = name;
}

//友元类声明
friend class MyClass_B;

private:
string m_name;
};

//类 B
class MyClass_B
{
public:
MyClass_B(string name)
{
m_name = name;
}

void Display(MyClass_A &myA);

private:
string m_name;
};

//成员函数
void MyClass_B::Display(MyClass_A &myA)
{
cout<

MyClass_A test("test");

cout< }

//测试代码
int main(int argc,char* argv[])
{
MyClass_A testA("Class A");
MyClass_B testB("Class B");

testB.Display(testA);

return 0;
}此时B可以访问A的所有元素,就好像A在B里面一样。


五. 总结

简单的说就是:声明一个友元函数或者是友元类,就是要把自己完全暴露给对方。

作者 lwbeyond