class Base
{
public:
virtual void testprint() {
cout << "base class print" << endl;
}
};
class MyClass : public Base
{
public:
void testprint() {
cout << "MyClass class print" << endl;
}
};
class MyClass11 : public Base
{
};
int main()
{
MyClass a;
static_cast<Base>(a).testprint();
dynamic_cast<Base>(a).testprint(); //“Base”: dynamic_cast 的目标类型无效,目标类型必须是指向已定义类的指针或引用
MyClass* aptr = new MyClass();
dynamic_cast<Base*>(aptr)->testprint(); //有虚函数virtual输出:MyClass class print,没有virtual输出:base class print
static_cast<Base*>(aptr)->testprint(); //有虚函数virtual输出:MyClass class print,没有virtual输出:base class print
cout << "---------------------------------------------" << endl;
Base* baseptr = new Base();
static_cast<MyClass*>(baseptr)->testprint(); //没有virtual输出:MyClass class print, 有virtual输出:base class print
dynamic_cast<MyClass*>(baseptr)->testprint(); //没有virtual编译会报错; 有virtual运行出错:引发了异常: 读取访问权限冲突。 ___RTDynamicCast(...) 返回 nullptr。
reinterpret_cast<MyClass*>(baseptr)->testprint(); //没有virtual输出:MyClass class print, 有virtual输出:base class print
cout << "---------------------------------------------" << endl;
MyClass11 obj11;
obj11.testprint();
}