-
我今天仔細研究了你的問題。
這是真的。 base *p 代表 p 作為指向基類型別的指標。 這是條件一。
p=&obj1 將 p 表示為指向子類物件的基類指標。 沒關係。 下面是乙個示例:
基類是“人”。
子類是從“人”派生的“學生”。
所以 p 代表型別 “person”,所以將 p 指向 “student”,這當然是可能的,因為 student 繼承了基類 “person” 的型別。
換句話說。 基類型別的指標 p 指向子類型別的物件 obj1。 它與條件一一起構成了實現多型性的必要條件。
所以如果用 p 呼叫基類中的虛函式,就可以實現多型性(前提是子類中有虛函式的 cover 函式),這意味著子類物件中的 cover 函式是根據 p 指向的子類物件呼叫的。
-
首先,在 C++ 中,繼承關係之間的指標轉換通常是通過安全轉換動態轉換完成的。
其次,在不安全的轉換中,編譯器不會幫助進行檢查,因此在編譯時不會出現錯誤。 如果子類的列印不涉及基類中未包含的成員函式或成員變數,則執行時不會出現錯誤。 但是,如果存在自定義元素的子類,則會報告錯誤。
此外,你這樣寫是一種非常奇怪的方式。 為什麼基類呼叫子類的函式? 如果你打算使用多型性,它應該是。
base* obj4 = new first_d(4);
obj4->print();print() 是乙個虛函式。
這是第乙個 d print()。
-
指向基類的指標可以指向從基類繼承的派生類物件的一部分,我們稱之為多型性。
如果 obj2 和 obj3 列印都繼承到基類,則呼叫有效。
-
它可以這樣定義。 在迴圈中,變數的作用域在迴圈的兩個{}中,因此不會重複定義。 如果重複定義,編譯器將報告錯誤。
-
1.定義。
型別:* 指標變數;
型別確定它所指向的記憶體空間的大小。
指標變數也是乙個具有自己的記憶體空間的變數,該記憶體空間儲存在另乙個變數的記憶體空間之上。
您可以使用 typedef 別名來減少定義變數的一些麻煩,例如 typedef int* 指標;
2.操作。
1)獲取位址。
int* p; int x; p = x;p 指向 x 的位址,p 的型別是 int*,x 的型別也是 int*
2)間接訪問。
對於常規指標變數,訪問格式為: *指標變數
結構型別的指標變數,訪問格式為:(*pointer variable)。結構成員或指標變數 - >結構成員
3)轉讓。任何型別的指標都可以分配給 void * 型別的指標變數,而 non-void * 型別的指標變數只能接受相同型別的賦值。
4)指標操作。
指標加減整數值:資料型別 * 指標變數; int a;“指標變數” +a; 可以理解為陣列中下標的變化,“Pointer Variable” = Pointer Variable + (a*sizeof)。
減去兩個相同型別的指標:結果是乙個整數值,對應於儲存空間中的元素數,可用於求陣列的大小。
5) 指標的輸出。
非 char* 型別的指標變數:cout<
範圍。 你靜態字元 *chh;
static char *ch1;雖然兩個指標指向的位址沒有變化,但你有沒有想過它們指向的記憶體位址是否已經釋放,char chc[10]; 它是本地的,函式已經結束,生命週期已經結束,你正在嘗試使用 void times() 中的指標訪問它。 >>>More
首先,模式不同。
A類**是在訂閱時直接扣除訂閱費,通常是“前端收費”模式。 前端收費模式是目前投資者最常用的收費模式,而我們平時訂閱的場外收費模式一般是前端收費模式。 >>>More
c,賦值操作要求左值與右值的型別相同。
同一型別意味著變數本身屬於同一型別,它指向的物件屬於同一型別,並且兩者都是必不可少的。 >>>More