【发布时间】:2014-07-06 14:23:34
【问题描述】:
在这段给定的代码中,我试图在不使用动态转换的情况下将基类指针分配给派生类指针(向下转换)。使用赋值运算符的帮助。
#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* 的转换无效。
【问题讨论】:
-
向上转换可以在没有转换操作符的情况下完成,而不是其他方式
-
C++ 不做隐式向下转换,你需要使用
dynamic_cast。原因是当你向下转型时,“派生类可以添加新的数据成员,而使用这些数据成员的类成员函数将不适用于基类。” (见bogotobogo.com/cplusplus/upcasting_downcasting.php) -
@vsoftco 这意味着没有动态转换就无法向下转换基类....我说得对吗??
-
是的,也可以看看这里的小教程了解为什么cplusplus.com/doc/tutorial/typecasting
标签: c++ pointers assignment-operator