前几天和朋友聊天,朋友提到他们项目组对服务器端代码进行了重构,使用ECS架构。这种基于组件开发的架构思想来源于组合优于继承原则。一个组件里面包含数据,但是没有方法,那么怎么访问到组件里面的数据呢?一种方法就是使用友元。一直以来对友元的实践较少,只了解一些基本概念,以为它的用处较少。此次听说ECS模式中涉及到了友元的概念,觉得友元还是一个比较重要的语法,于是就去深入学习了一下友元。友元分为友元类和友元函数,友元函数包括成员函数和非成员函数。友元的存在使得在类外部也可以访问类的私有成员。测试代码如下:
#include <iostream>
using namespace std;
class Test1204;//前置申明
class Test1204Friend2
{
public:
void print(Test1204* f);
private:
int a = 2;
};
class Test1204
{
public:
friend class Test1204Friend;//友元类
friend void Test1204Friend2::print(Test1204* f);//友元之成员函数
friend void test_friend(Test1204* f);//友元之非成员函数
void print()
{
cout << "test1204" << endl;
}
private:
int a=0;
};
//print函数的实现放在Test1204类申明的后面
void Test1204Friend2::print(Test1204* f)
{
f->print();
cout << f->a << endl;
}
class Test1204Friend
{
public:
void print(Test1204* f)
{
f->print();
cout << f->a <<endl;
}
private:
int a=1;
};
void test_friend(Test1204* f)
{
f->print();
cout << f->a << endl;
}
int main()
{
Test1204 t1;
Test1204Friend t2;
Test1204Friend2 t3;
t2.print(&t1);
t3.print(&t1);
test_friend(&t1);
return 0;
}
参考资料: