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;
}
备注:非多态情况下,基类的指针可以指向派生类的对象,但是调用方法时,使用的是它本身类型的方法,因为他不符合多态的定义。

本文通过C++代码示例介绍了非多态情况下的基类指针指向派生类对象的行为,展示了如何通过静态转换获取派生类特性和成员变量。
2719

被折叠的 条评论
为什么被折叠?



