c 父類的私有成員能否繼承

2021-09-26 04:07:56 字數 679 閱讀 8068

1.子類可以間接訪問父類私有成員

父類的私有成員函式和私有成員變數一樣,只有該類內部的其他成員函式可以呼叫,對外是封蔽的。子類繼承了父類的共有函式,且父類的公有函式呼叫了其內部的私有函式,此時子類呼叫父類的公有函式便能訪問父類的私有成員函式了。

#include using namespace std;

class a

;void a::outpulic() //基類的公有函式呼叫了類自身的私有函式

void a::outprivate() //基類的私有成員函式定義,輸出函式名

{ cout<<"outprivate"《執行結果:

outprivate

2.私有成員如何繼承?

從物理結構上來說,子類確實包含了父類的私有成員,但是我們不能通過正常的渠道訪問到他們。

#includeusing namespace std;

class a

{private:

int a;

void funa(){cout<<"a"《執行結果:

48

對於私有成員的訪問,我們可以通過內聯彙編獲取該函式的入口位址,然後就能順利訪問了。

參考:

問題 C 子類能否訪問父類私有成員變數?

在此之前,需要先了解下c 的繼承機制。計算子類物件大小時,也將父類私有成員變數所佔大小計算在內,也就是說,子類繼承父類時,也將父類私有成員變數繼承了過來,只是對子類不可見,不可操作。可以做乙個實驗進行檢驗 pragma once class fclass include fclass.h fclas...

繼承父類私有成員是否可以修改

includeusing namespace std class base public void print a 1 cout 用public方法繼承父類的public成員函式和private私有成員變數,子類自己的成員函式print不能訪問繼承父類的私有變數,但是繼承的print函式可以訪問繼承...

類的繼承私有成員問題

類的繼承過程分為公有繼承,保護繼承和私有繼承,無論哪一種繼承,基類的私有成員在派生類成員中都是不可見的,可是基類的私有成員是否被派生類繼承了呢?通過以下實驗即可知道。如下 include using namespace std class base private virtual void f in...