當前位置:首頁 » 文件傳輸 » 基類的對象可以訪問派生類成員
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

基類的對象可以訪問派生類成員

發布時間: 2022-10-09 01:06:36

Ⅰ C++中基類指針指向派生類對象可以調用派生類的新增成員么

NO!基類指針告訴編譯器它的靜態類型是基類這種類型,所以限定了這個指針只能調用基類的自有成員。這個其實無關於他指向什麼類型對象。
但是,你作為這個指針的寫作者,你當然知道這個基類指針指向的是派生類對象。所以,可以將這個基類指針強制轉換為派生類指針(就是強制編譯器把這個指針靜態類型看作派生類型),靜態類型表明了一個對象 能執行的所有動作(成員函數)+它的自有屬性(數據成員),這樣派生類的新增成員就可以被這個指針調用了
動態綁定的重寫基類的virtual方法並不是派生類新增成員,而是重寫(override)。

Ⅱ c++中基類能用派生類中的成員嗎

不能。
派生類可以使用基類的,但基類無法訪問派生類中的成員數據或成員函數。因為基類不可能知道它的派生類有哪些成員數據或函數。

Ⅲ C++的基類如何訪問其派生類的成員變數

C++中派生類對基類成員的訪問形式主要有以下兩種:
1、內部訪問:由派生類中新增成員對基類繼承來的成員的訪問。
2、對象訪問:在派生類外部,通過派生類的對象對從基類繼承來的成員的訪問。

三種繼承方式下,派生類對基類成員的訪問規則。

1、私有繼承的訪問規則

Ⅳ 對於C++中說基類成員函數只能訪問基類成員,而不能訪問派生類的成員,有疑問

首先,派生類的新成員不在基類的作用域內,那麼如果基類想要訪問派生類的新添加成員就必須只能是派生類對象的成員(情況1)或者派生類的靜態數據成員(情況2)。

其次,基類的定義必定是在派生類前面的,那麼,基類要想使用派生類的新添加成員,必須對派生類作前置聲明。而又因為僅有前置聲明是不能定義實體對象的,所以情況1是不可能的。情況2基本同理。

情況1:
class B;//前置聲明
B b;//這里會出錯,因為編譯器此時還不能獲取到B的定義,根本無法創建B類的實體對象
class A
{
public:
void f()
{
cout << b.y;//試圖訪問派生類對象的成員
}

};

class B : public A
{
public:
static int x;
int y;
};

情況2:

class B;//前置聲明
class A
{
public:
void f()
{
cout << B::x;//試圖訪問派生類的靜態成員。這里會出錯,因為編譯器此時還不能獲取到B::x的定義
}

};

class B : public A
{
public:
static int x;
int y;
};

Ⅳ 基類對象可以引用派生類對象嗎

要看你怎麼引用,在絕大部分情況下不可以,因為基類不知道派生類是什麼。但是通過virtual函數引用還是可以的

Ⅵ 基類的成員能夠訪問派生類的什麼成員

不能!只有派生類訪問基類的部分成員,例如:馬作為基類,白馬作為派生類。基類:馬,不一定有「白」的特性,但是:白馬,一定有『馬』的特性。

Ⅶ c#中基類如何訪問派生類的對象

不是所有基類對象都能訪問派生類的成員派生類對象可以賦值給基類變數, 這樣的基類變數才可以訪問派生類成員方法是:派生類 p = new 派生類(); //生成派生類對象 基類b = p; //把派生類賦值給基類派生類 o = b as 派生類(); //使用o訪問派生類成員

Ⅷ C++中基類的對象可以作為派生類的成員嗎

可以,基類本身也是一個類,類的對象當然可以作為另類的成員。 並沒有因為有父子區別而無法進行,支只不過調用時,子類成員調用用一個點,你調用裡面的類對象成員用兩個點罷了。
如a.c
a.b.c
b是a的成員,b自己還有一個成員c。
這兩個成員是不一樣的,分別是子類的c和父類的c,呵呵