#include <iostream>
class A
{
public:
A()
{
std::cout << "\n A_Constructor \t" << this <<std::endl;
}
void A_Method()
{
std::cout <<"\n A_Method \t" << this <<std::endl;
}
};
class B:public A
{
public:
B()
{
std::cout <<"\n B_Constructor \n";
}
void B_Method()
{
std::cout <<"\n B_Method \t" << this <<std::endl;
}
};
int main()
{
A *a_obj = new A;
B *b_obj = static_cast<B*> (a_obj); // This isn't safe.
b_obj->B_Method();
getchar();
return 0;
}
输出 :
A_Constructor 001C4890
B_Method 001C4890
由于类型转换不涉及运行时检查,static_cast
因此不安全。但在这个例子中,我得到了我没想到的东西。由于没有调用 to B::B()
,因此它的任何成员都不应该被调用b_obj
。尽管如此,我还是得到了输出。
在这个简单的例子中,虽然已知不安全,但我可能已经成功了。我的疑问是——
- 虽然没有调用
B::B()
,但我是如何访问class B
成员函数的。 - 有人可以提供一个例子,这是不安全的并且可能会出错(尽管我之前给出的可能是一个坏例子,但更好)。
我是在 Visual Studio 2010 上完成的,并设置了\Wall选项。