四十一 繼承與派生 作用域分辨符

2021-07-02 14:38:35 字數 967 閱讀 3591

作用域分辨符主要是為了處理基類和派生類成員的可見性問題。

派生類在繼承時,基類成員和派生類成員都有類作用域。兩個具有包含關係的作用域,派生類位於內層。當派生類和基類中存在同名的資料成員或函式成員時,派生類的新成員覆蓋了基類成員。也就是說在派生類內還是在派生類外部都只能訪問到派生類成員,同名基類成員無法訪問。

這時我們可以用作用域分辨符來訪問基類中的同名成員。基類名限定了後面成員的所屬類。語法形式:

基類名::資料成員名; // 資料成員

基類名::函式成員名(參數列); // 函式成員

如果是在派生類外通過派生類物件訪問的話,前面還要加上「派生類物件名.」:

派生類物件名.基類名::資料成員名;                  // 資料成員

派生類物件名.基類名::函式成員名(參數列); // 函式成員

如果多個基類具有同名成員,派生類新增的同名成員同樣會將其覆蓋。如果派生類中沒同名成員,訪問多個基類的同名成員也需要作用域分辨符。這是因為從多個基類繼承而來的同名成員在派生類中具有相同作用域,成員名無法唯一標識。

#includeusing namespace std;

class base1

{public:

voidshow(){cout<<"x of base1 "《上面討論的是假設多個基類之間沒有繼承也沒有共同基類的情況。如果派生類的全部或部分基類有共同的基類。那麼派生類的直接基類從上一級基類繼承而來的成員都有同名成員。要訪問他們就必須通過作用域分辨符。

#includeusing namespace std;

class base0

{public:

voidshow(){cout<<"x of base1 "《上面**中,資料成員x在記憶體中有兩份拷貝,當然這兩份可以存放不同的數值。但一般我們只需要乙份這樣的資料,明顯造成了記憶體浪費。解決這個問題我們後面講到虛基類。

題解四十一

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用加粗標出 a ...

CUDA學習(四十一)

表面功能 在下面的部分中,boundarymode指定邊界模式,即處理超出範圍的表面座標的方式 它等於cudaboundarymodeclamp 在這種情況下,超出範圍的座標被鉗位到有效範圍 或cudaboundarymodezero 在這種情況下超出範圍的讀取返回零並且超出範圍的寫入被忽略 或cu...

(四十一)auto命令

當我們給變數宣告時,通常採用int,或者double等整型或者浮點型別來宣告,例如int a double b 等。當我們遇見乙個常量,也可以用另外一種方法進行宣告。在c 11後方能使用。但是怎麼知道是不是c 11 那就是auto,例如 auto a 1 當使用auto的時候,編譯器會根據值自動賦予...