问题描述
由于我尚未实例化派生类对象,因此该代码在应出现运行时错误时运行良好。
#include <iostream>
using namespace std;
class Person {
public:
void walk() { cout << "person walking" << endl; }
};
class Employee :public Person {
public:
void work() { cout << "employee working" << endl; }
};
void main() {
Person* p = new Person();
Employee* e = static_cast<Employee*>(p);
e->work();// this is working - but why? it should fail at runtime
}
如果static_cast仅转换指针,那么如何调用子成员函数?
在什么时候实例化孩子?
static_cast还在实例化对象吗?
解决方法
否。
不幸的是,您断言您的代码应“在运行时崩溃”是错误的。您的代码表现出未定义的行为,这意味着它可以执行任何操作。在这种情况下,我希望它能工作,因为函数的地址在两个对象中都是相同的,但实际上可能是出于任何原因。