水平:看的 C++primer 5 ,目前只把类的基本东西学了。 越往后看越觉得类的结构(主要是几个类之间互相牵扯)复杂,就重新复习和整理了一下友元部分。 书上的话不是特别直接,为了让结构更清晰,直接给图+表格,再给个对应的类结构代码。
图解

表格

代码
main.cpp
 main函数统一都是这样的结构,只包个类头文件。
表格中第一种
#include <string>
class A
{
friend void fun(A a);
public:
private:
std::string data = "TEST";
};
void fun(A a);
void fun(A a)
{
std::cout << a.data;
return;
}
~
表格中第二种
好像没什么用
#include <string>
class B
{
public:
void fun(){ std::cout << "class B"; }
private:
};
class A
{
friend class B;
public:
private:
std::string data = "TEST";
};
表格中第三种
这个和刚刚的对比起来看会更清晰
#include <string>
class A
{
friend class B;
public:
private:
std::string data = "TEST";
};
class B
{
public:
A a;
void fun(){ std::cout << a.data; }
private:
};
表格中第四种
好像没什么用
class A
{
public:
void func_a() { return; }
private:
};
class B
{
public:
friend void A::func_a();
private:
int num = 999;
};
表格中第五种
这个就是最复杂那种了,记住“前置声明(后定义类的前向声明),后置定义(前定义类的成员函数的定义)” 就可以了。
#include <string>
class B;
class A
{
public:
void fun_a(B b);
private:
};
class B
{
public:
friend void A::fun_a(B b);
private:
int num = 999;
};
void A::fun_a(B b)
{
std::cout << b.num;
}
反例就不举了,只要超出表格给的位置限制就是反例。
后面还有类的机制没学,等学得更多了就会回来更。
|