重定義 (redefining)也叫做隱藏:
子類重新定義父類中有相同名稱的非虛函數 ( 參數列表可以不同 ) 。
class Base {
private:
virtual void display() { cout<<"Base display()"<<endl; }
void say(){ cout<<"Base say()"<<endl; }
public:
void exec(){ display(); say(); }
void f1(string a) { cout<<"Base f1(string)"<<endl; }
void f1(int a) { cout<<"Base f1(int)"<<endl; } //overload,兩個f1函數在Base類的內部被重載
};
class DeriveA:public Base{
public:
void display() { cout<<"DeriveA display()"<<endl; } //override,基類中display為虛函數,故此處為重寫
void f1(int a,int b) { cout<<"DeriveA f1(int,int)"<<endl; } //redefining,f1函數在Base類中不為虛函數,故此處為重定義
void say() { cout<<"DeriveA say()"<<endl; } //redefining,同上
};
class DeriveB:public Base
{
public:
void f1(int a) { cout<<"DeriveB f1(int)"<<endl; } //redefining,重定義
};
int main(){
DeriveA a;
Base *b=&a;
b->exec(); //display():version of DeriveA call(polymorphism) //say():version of Base called(allways )
b里邊的函數display被A類覆蓋,但是say還是自己的。
a.exec(); //same result as last statement
a.say();
DeriveB c;
c.f1(1); //version of DeriveB called
}
執行結果:

a 相同的范圍(在同一個類中)