class Base { // 基类
public:
Base(int aa=88) : a(aa) {}
void f() { // 非virtual
cout<<"Base"<<endl;
}
int a;
};
class Derived : public Base { // 派生类
public:
Derived(int ba= 77, int bb = 66) : a(ba), b(bb) {}
void f() { // 非多态
cout<<"Derived"<<endl;
}
int a;
int b;
};
int main(){
Base* p = new Derived();
p->f(); // Base
(*p).f(); // Base
static_cast<Derived*>(p)->f(); // Derived
cout<<p->a<<endl; // 88 基类
cout<<static_cast<Derived*>(p)->a<<endl; // 77
cout<<static_cast<Derived*>(p)->b<<endl; // 66
delete p;
return 0;
}
备注:非多态情况下,基类的指针可以指向派生类的对象,但是调用方法时,使用的是它本身类型的方法,因为他不符合多态的定义。