繁体   English   中英

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

[英]Assign base class pointer to derived class without using dynamic cast

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

#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 *的无效转换。

您必须通过dynamic_caststatic_cast (在这种情况下,请注意UB)...

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

而您的分配运算符将无济于事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM