【发布时间】:2018-03-20 17:03:28
【问题描述】:
我想知道 c++ 和 java 都使用 oops 概念,但语法却大不相同。
我发现 java 使用 new ClassName() 来获取对堆的引用,但获得对堆的相同引用,为什么 c++ 使用 new ClassName。
#include<iostream>
using namespace std;
class Bike
{
public:
virtual void run()
{
cout << "running";
}
};
class Splender :public Bike
{
public:
void run()
{
cout << "running safely with 60km";
}
};
int main()
{
Bike &obj = new Splender();//error but reason?
obj.run();
}
错误: 从“Splender*”类型的右值初始化“Bike&”类型的非常量引用无效
【问题讨论】:
-
看一本C++教科书,C++不是Java
-
如果你不知道
Bike &obj=new Splender();是一个错误,是时候回到a good text book了。 -
错误信息说明了原因。
-
这个问题是基于错误的前提。是的,我们可以在 C++ 中使用
new ClassName()。
标签: c++ inheritance polymorphism upcasting