Dynamic_cast:两个具有几乎相同方法的类

时间:2014-01-23 02:03:06

标签: c++ class dynamic-cast

假设我们有两个类:

class A:
{
   A(int a); // c'tor
   virtual ~A(); // d'tor
   FirstMethod(...);
   SecondMethod(...); 
}

class B:public A
{
   B(int a); // c'tor
   ~B(); // d'tor
   FirstMethod(...); 
   SecondMethod(...);
}

两个类A和B具有完全相同的方法(相同的名称和参数,但不一定具有相同的功能)和成员,除了析构函数的名称和构造函数的名称,它们是不同的。 现在,假设我们有一个对象:

 A* aObject = new A();

我们这样做:

B* bObject= dynamic_cast<B*>(aObject);

最后一次投射会成功还是bObject会为NULL?或者换句话说,程序能否区分A *类型的对象和B *类型的对象?

2 个答案:

答案 0 :(得分:4)

  

最后一次投射会成功还是bObject会为NULL?

这将是NULL。动态投射不会神奇地创建B。如果您指向实际的B*,它只会为您提供B。在这里,您只有A

答案 1 :(得分:1)

动态转换将失败,但编译将首先失败。我知道你的意图,但我认为你正在尝试编写dynamic_cast(aObject)而不是尝试强制转换类型。这是编译失败。但是在纠正之后,动态转换仍然会失败,因为aObject不是B *类型(它没有通过is-a测试)。要使它起作用,B必须来自A。