首页 > 编程语言 > 详细

C++ 友元:在一个类中,调用另一个类的private方法。

时间:2020-05-08 20:43:12      阅读:243      评论:0      收藏:0      [点我收藏+]

在编辑程序的时候,如果文件过多,难免会遇到需要跨文件调用函数的时候,即访问另一个类中的方法(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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!