基類訪問派生類
Ⅰ 基類對象可以直接訪問派生類成員嗎
開發語言
C++中派生類對基類成員的三種訪問規則
冬雪如春
原創
關注
2點贊·4286人閱讀
C++中派生類對基類成員的訪問形式有兩種:
1.內部訪問:派生類新增成員對從基類繼承過來成員進行訪問
2.對象訪問:在派生類外部,通過派生類對象對從基類繼承過來的成員進行訪問
下面看看派生類對基類的成員的訪問規則:
1.派生類私有繼承了基類規則(private)
當類的繼承方式是私有繼承(private)時,基類中的public和protected成員被繼承後稱為派生類的私有成員,派生類的成員可以直接訪問他們,但是在類的外部,通過派生類的對象是不可以對其進行訪問的。還有基類中的私有成員在派生類中是不可以直接訪問的,無論是派生類的成員還是派生類的對象都無法訪問基類中的私有成員。但可以通過基類提供的public 函數對其進行間接的訪問。
2.派生類保護繼承了基類規則:(protected)
當類的繼承方式是保護繼承(protected)時,基類中的public和protected成員被繼承後稱為派生類的保護成員,派生類的成員可以直接訪問他們,但是在類的外部,通過派生類的對象是不可以對其進行訪問的。還有基類中的私有成員在派生類中是不可以直接訪問的,無論是派生類的成員還是派生類的對象都無法訪問基類中的私有成員。但可以通過基類提供的public 函數對其進行間接的訪問。
3.派生類公有繼承了基類規則:(public)
當類的繼承方式是公有繼承(public)時,基類中的public和protected成員被繼承後稱為派生類的公有成員和保護成員,派生類的成員可以直接訪問他們,但是在類的外部,通過派生類的對象只能進行訪問繼承過來的public成員。還有基類中的私有成員在派生類中是不可以直接訪問的,無論是派生類的成員還是派生類的對象都無法訪問基類中的私有成員。但可以通過基類提供的public 函數對其進行間接的訪問。
Ⅱ C++的基類如何訪問其派生類的成員變數
C++中派生類對基類成員的訪問形式主要有以下兩種:
1、內部訪問:由派生類中新增成員對基類繼承來的成員的訪問。
2、對象訪問:在派生類外部,通過派生類的對象對從基類繼承來的成員的訪問。
三種繼承方式下,派生類對基類成員的訪問規則。
1、私有繼承的訪問規則
Ⅲ c#中基類如何訪問派生類的對象
將派生類在父類裡面聲明為友元類就可以訪問
否則無法訪問
可參考以下代碼
// 以下代碼在VC2008下測試通過
#include <iostream>
using namespace std;
class TT;
class Base
{
public:
Base(int d) : data(d)
{
}
private:
int data;
friend class TT;
};
class TT : public Base
{
public:
TT(int d) : Base(d)
{
}
int getData() const { return data; }
};
void main(void)
{
TT t(3);
cout << t.getData() << endl;
cin.get();
}
Ⅳ c#中基類如何訪問派生類的對象
不是所有基類對象都能訪問派生類的成員派生類對象可以賦值給基類變數, 這樣的基類變數才可以訪問派生類成員方法是:派生類 p = new 派生類(); //生成派生類對象 基類b = p; //把派生類賦值給基類派生類 o = b as 派生類(); //使用o訪問派生類成員
Ⅳ 關於基類對派生類的訪問
5 7 -858993460
2 4 -858993460
5 7 8
8請按任意鍵繼續. . .
仔細分析你的輸出:
tb.pp(tb); //初始化
ta.display() // 因為你ta沒有初始化z,所以輸出是隨機的
tb.display() // 初始化了,沒錯。
其實你沒有注意到你的派生類中也有個z不是嗎?
你換成其它名字看看?
Ⅵ c++里基類的指針, 能訪問派生類的成員變數嗎
360問答
指向派生類的基類指針可不可以調用派生類成員函數?
軍8786050 LV12
2017-01-18
如果可以,怎麼訪問,如果不可以有什麼解決辦法?
滿意答案
liqi26zc
LV6
2017-01-19
可以,只要那個派生類成員函數是基類的成員函數的一個重寫版本
以C++為例,假如有
class Runnable {
virtual void run();
};
class myclass : Runnable {
virtual void run() { throw runtime_error("unimplemented"); }
};
並且有
myclass o;
Runnable* p = &o;
那麼 p->run() 就調用了派生類的 run 函數