令人迷惑的隱藏規則

2021-05-25 23:49:04 字數 551 閱讀 9521

「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual

關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual

關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。

示例程式8-2-2(a)中:

(1)函式derived::f(float)覆蓋了base::f(float)。

(2)函式derived::g(int)隱藏了base::g(float),而不是過載。

(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。

#include

class base

void g(float x)

void h(float x)

};class derived : public base

void g(int x)

void h(float x)

};

令人迷惑的AT T的jmp 直接跳轉和間接跳轉

最近看鏈結器原始碼中,對位置無關 pic 共享庫 的鏈結問題,發現對call和jmp很多不常用的用法,這裡試驗並總結了一下各種用法。我們最常用的jmp形式,就是 jmp後面跟個標籤!這個沒什麼可說的!假如標籤叫做mylabel,它的位址是0x8048377,而且有個全域性變數b,b儲存的內容就是my...

C 隱藏規則

在物件導向的開發過程中,經常出現類的繼承,這裡面出現的成員函式的過載 overload 覆蓋 override 與隱藏 hidden 很容易混淆。首先澄清這3個概念 過載相同的範圍 在同乙個類中 函式名字相同 引數不同 virtual 關鍵字可有可無 覆蓋 派生類函式覆蓋基類函式 不同的範圍 分別位...

型別相容規則與同名隱藏規則

型別相容規則 通過公有繼承,派生類得到了基類中除建構函式 析構函式之外的所有成員。這樣,公有派生類實際就具備了基類的所有功能,凡是基類能解決的問題,公有派生類都可以解決。乙個公有派生類的物件在使用上可以被當作基類的物件 通過基類物件名 指標只能使用從基類繼承的成員 include using nam...