1.過載
class base
void show(int i) };
這兩個函式就構成了過載,在相同的作用域內,函式名相同,引數不同
2.隱藏
隱藏很簡單,就是派生類中的函式會隱藏基類中同名的函式,無關其他
class base
};class derive :public base
};
隱藏發生後,父類還是呼叫父類的函式,子類還是呼叫子類的函式
3.覆蓋
class base
void show(int i) };
class derive :public base
};int main()
定義乙個基類的指標指向子類的物件,呼叫show函式的時候派生類會把基類的show函式覆蓋,所以呼叫的是派生類的
面試點1.派生類繼承了基類的什麼?
我們通過下面一段**看一下
#include#includeclass people
void eat()
static int ma;
void show()
typedef int elem_type;
protected:
std::string mname; //28
int mage; // 4
bool m***; // 4
};int people::ma = 10; //靜態的成員變數需要在類外初始化
class student : public people
protected:
std::string mid;//28
};int main()
{ student stu("zhangsan", 20, true, "001");
stu.eat();
std::cout << sizeof(student) << std::endl;
std::cout << sizeof(people) << std::endl;
std::cout所以派生類繼承了父類中除了建構函式和析構函式意外所有的成員。
2.派生類的記憶體布局
基類的布局優先於派生類
3.派生類的析構方式和構造方式
又上圖可以看出,父類先構造,然後子類在構造;在析構的時候正好相反,子類先析構,父類在析構
4.繼承方式的許可權
1.子類無法訪問父類中的private成員
2.父類的protected成員可以被子類訪問,但是不可以被外部訪問
3.private會被繼承,但是無法訪問
4.class中預設的方式是private,繼承預設也是private方式
5.父類中成員通過相應的繼承方式繼承給子類後,這些成員對於子類來說,訪問許可權以繼承的等級為最低級別。例如:父類中a為private許可權,無論通過什麼方式都不可以訪問該變數
5.類和類的關係
1.組合 a part of has_a
2.繼承 a kind of is_a
3.**
類中的同名函式關係,過載,覆蓋 重寫,隱藏
對於類中的同名函式,過載,覆蓋 重寫,隱藏 c 特性,不是類亦可以實現過載,與virtual無關聯。過載 同一類域抑或無類域,相同函式名,不同形參個數或型別 由形參決定呼叫哪個函式實現。同類域同名函式相同形參會引起編譯錯誤。virtual修飾函式需要相同的返回值與形參型別,多型特性則需要該修飾符才能...
c 覆蓋 過載 隱藏 的關係
過載 只有在同一類定義中的同名成員函式才存在過載關係,主要特點是函式的引數型別和數目有所不同,但不能出現函式引數的個數和型別均相同,僅僅依靠返回值型別不同來區分的函式,這和普通函式的過載是完全一致的。另外,過載和成員函式是否是虛函式無關 覆蓋 在派生類中覆蓋基類中的同名函式,要求兩個函式的引數個數 ...
函式的過載,覆蓋,隱藏區別
過載 指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。注意是相同的範圍 同乙個類 函式名相同,引數不同,跟virtual 沒有關係。覆蓋 也翻譯成重寫,指派生類中存在重新定義的函式。其函式名,引數列表,返回值型...