【发布时间】:2016-03-23 13:25:39
【问题描述】:
确切地说,为什么B b = (B&) a 可以编译和工作,而B b = (B) a 在下面的程序中却没有?
#include <iostream>
using namespace std;
class A {public: void f(){ cout<<"A"<<endl;} };
class B : public A { public: void f(){cout<<"B"<<endl;} };
void g(A a){ B b = (B&) a; b.f(); }
int main() {
B b; g(b);
return 0;
}
有没有关于我在这里缺少的引用转换为派生类型的东西?如果我只是转换为 B,它会给出构造函数 B(A a) 不存在的编译时错误。
【问题讨论】:
-
“为什么”是什么意思?您是否需要指定此行为的标准引用?或者是一个深刻的哲学原因,为什么允许这样做是个坏主意?
-
显然是第一个。我不知道为什么标准允许转换为派生类型引用而不是派生类型实例。如果引用按标准解释为指针,那将是有意义的。
-
当你只需要
'\n'时不要使用std::endl。
标签: c++ inheritance casting reference derived-instances