static_cast 正在创建新的 child object 吗?
Is static_cast creating new child object?
这段代码运行正常,但它应该有一个 run-time 错误,因为我还没有实例化派生的 class object.
#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 仅转换指针,如何调用 child 成员函数?
child 在什么时候实例化?
static_cast 是否也在实例化 objects?
没有
不幸的是,您断言您的代码应该“在运行时崩溃”是错误的。您的代码表现出未定义的行为,这意味着它实际上可以做任何事情。在这种情况下,我希望它能工作,因为函数的地址在两个对象中是相同的,但实际上,它可能是出于任何原因。
这段代码运行正常,但它应该有一个 run-time 错误,因为我还没有实例化派生的 class object.
#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 仅转换指针,如何调用 child 成员函数?
child 在什么时候实例化?
static_cast 是否也在实例化 objects?
没有
不幸的是,您断言您的代码应该“在运行时崩溃”是错误的。您的代码表现出未定义的行为,这意味着它实际上可以做任何事情。在这种情况下,我希望它能工作,因为函数的地址在两个对象中是相同的,但实际上,它可能是出于任何原因。