在这段给定的代码中,我试图将基类指针分配给派生类指针(向下转换)而不使用动态强制转换。使用赋值运算符的帮助。
#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 *无效。
答案 0 :(得分:0)
你必须按dynamic_cast
或static_cast
施放(在这种情况下要小心UB)...
在C ++中,运行时类型检查是通过dynamic_cast实现的。 编译时向下转换是由static_cast实现的,但是这个 操作不执行类型检查。如果使用不当,可以 产生未定义的行为[1]。
并且你的任务操作员也无济于事。