#include <iostream>
class A {
public:
void func() {
std::cout << "Hello" << std::endl;
}
void func(int k) {
}
};
class B : public A {
public:
using A::func; // 把這句注釋掉試試,嘿嘿
void func(int i) {
}
};
int main() {
B b;
b.func();//編譯出錯這一句,告訴不接受0個參數(shù).
}
類成員函數(shù)的重載、覆蓋和隱藏區(qū)別?
答案:
a.成員函數(shù)被重載的特征:
(1)相同的范圍(在同一個類中);
(2)函數(shù)名字相同;
(3)參數(shù)不同;
(4)virtual 關鍵字可有可無。
b.覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:
(1)不同的范圍(分別位于派生類與基類);
(2)函數(shù)名字相同;
(3)參數(shù)相同;
(4)基類函數(shù)必須有virtual 關鍵字。
c.“隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:
(1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無virtual關鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual 關鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)
隱藏后, 即在子類中看不到父類的函數(shù)。