重定义 (redefining)也叫做隐藏:
子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
class Base {
private:
virtual void display() { cout<<"Base display()"<
void exec(){ display(); say(); }
void f1(string a) { cout<<"Base f1(string)"<
};
class DeriveA:public Base{
public:
void display() { cout<<"DeriveA display()"<
void f1(int a,int b) { cout<<"DeriveA f1(int,int)"<
void say() { cout<<"DeriveA say()"<
};
class DeriveB:public Base
{
public:
void f1(int a) { cout<<"DeriveB f1(int)"<
};
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 相同的范围(在同一个类中)
class A{ public: virtual int fun(){} }; class B:public A{ int fun(int a){} //这是重载而不是重写:
} int mian() { }
class B:public A{ int fun() // 从A继承来的 fun, 编译器会自己偷偷帮你加上 int fun(int a){} // 新的fun, 和前面的只是名字一样的, 不是 }