1. 程式人生 > >過載,覆蓋和隱藏的區別

過載,覆蓋和隱藏的區別

過載:是指在相同範圍內(同一個類),相同的函式名,但引數不一樣

覆蓋:是子類和父類範圍內而言的,函式名相同,而且引數相同,並且是virtual 函式,這樣如果是通過指標或引用來呼叫的話就可以根據實際的型別來動態決定呼叫子類還是父類的函式

隱藏:這個比較容易和覆蓋混淆,他們都是對於子類和父類而言的。1)函式名相同,而且引數不同,不管是否是virtual;2)或者函式名相同,引數相同,但不是virtual函式;兩種情況都是隱藏,那麼子類中的函式會隱藏父類中的同名函式,父類中的函式就不可見了,如果你想呼叫它,要麼編譯出錯(對於引數不同的情況);或者是呼叫了子類的同名函式(引數相同)

class A{
public:
void fun1(){printf("A fun1\n");}
void fun2(){printf("A fun2\n");}
};

class B:public A{
public:
virtual void fun1(){printf("B fun1\n");}
void fun2(int i){printf("B fun2\n");}
};

int main()
{
B b;
b.fun1();  // 呼叫的是B的fun1
b.fun2();  //編譯出錯
return 0;
}

相關推薦

no