以下是代码段
#include <iostream>
using namespace std;
class A
{
public:
void print() const
{
cout << "In A::print()\n";
}
virtual void show()
{
cout << "In A::show()\n";
}
};
class B : public A
{
public:
void print() const
{
cout << "In B::print()\n";
}
void show()
{
cout << "In B::show()\n";
}
};
int main() {
A* a = new A;
a->show();
a->print();
B* b = dynamic_cast<B*>(a);
cout << b << endl;
b->print();
b->show();
return 0;
}
这是我运行时的输出(我使用的是Visual c ++编译器),
In A::show()
In A::print()
00000000
In B::print()
and then program stops working ....
有两个问题,
1.如果B::print()
失败,为什么/如何调用函数dynamic_cast
成功,因为b
的值为0,如输出中所示?
B::show()
时停止工作(鉴于此
B::print()
之前的电话是否成功排队?答案 0 :(得分:1)
毫不奇怪。
this
为NULL,但从未在其正文中使用过。this
,但它仍然需要一个虚方法表查找来确定正确的子类方法地址。指向虚拟表的指针是B类的(隐藏)字段;如果b为NULL,则程序崩溃。