将基类指针指定给派生类,而不使用动态强制转换

时间:2014-05-18 16:03:08

标签: c++ pointers assignment-operator

在这段给定的代码中,我试图将基类指针分配给派生类指针(向下转换)而不使用动态强制转换。使用赋值运算符的帮助。

#include<iostream>
using namespace std;

class A
{
 int i;
 public:
  A& operator =( const A& b)  
     {
        i = b.i;
        return *this ;
     }
};

class B:public A
{
int j;
public:
B& operator =( const B& c)  
     {
        A::operator=(c);
        j=c.j;
        return *this ;
    }
};

int main()
{
A *a;
B *b;
    b=a;
return 0;
}

显示错误:A *转换为B *无效。

1 个答案:

答案 0 :(得分:0)

你必须按dynamic_caststatic_cast施放(在这种情况下要小心UB)...

  

在C ++中,运行时类型检查是通过dynamic_cast实现的。   编译时向下转换是由static_cast实现的,但是这个   操作不执行类型检查。如果使用不当,可以   产生未定义的行为[1]

并且你的任务操作员也无济于事。

相关问题