在编辑程序的时候,如果文件过多,难免会遇到需要跨文件调用函数的时候,即访问另一个类中的方法(private和public),但是这些方法是并不能直接使用的,因此,可以使用友元类来完成。
假设有类Test和类MyTest,现在我们想在Test类中,调用MyTest的方法,则需要将Test设置为MyTest的友元类。方法如下,在MyTest.h中添加红色部分代码
#ifndef MYTEST_H #define MYTEST_H class Test; class MyTest { Q_OBJECT public: friend class Test; explicit MyTest(); ~MyTest(); void fun_2(); private: void fun_1(); }; #endif // MYTEST_H
不需要在前面#include"test.h",添加上面红色部分代码,此时Test就已经是MyTest的友元类,其中fun_1()和fun()_2代码如下:
void MyTest::fun_2() { cout<<"这是公有函数"; } void MyTest::fun_1() { cout<<"这是私有函数"; }
在Test.h中,需要添加如下代码
#ifndef TEST_H #define TEST_H #include"mytest.h" class Test { public: explicit Test(); ~Test(); void on_pushButton_clicked(); private: MyTest *m; }; #endif // TEST_H
即,包含MyTest头文件,以便于创建MyTest类对象,声明对象之后,需要在Test的构造函数中给其分配地址:m=new MyTest;
下面是Test.cpp中,on_pushButton_clicked()函数的内容
void Test::on_pushButton_clicked() { m->fun_1(); m->fun_2(); }
这个函数用来验证是否能调用另一个类的方法。
当我把friend class Test注释掉之后,结果如下
编译器会显示fun_1是私有成员无法调用的提示。
把friend class Test取消注释之后,程序才可以正常编译,编译结果如下
表明友元类创建成功。
C++ 友元:在一个类中,调用另一个类的private方法。
原文:https://www.cnblogs.com/leocc325/p/12852852.html