C++ 友元:在一個類中,調用另一個類的private方法。


在編輯程序的時候,如果文件過多,難免會遇到需要跨文件調用函數的時候,即訪問另一個類中的方法(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取消注釋之后,程序才可以正常編譯,編譯結果如下

表明友元類創建成功。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM