我是c ++的新手,我不知道如何处理这种类型的返回类型:
const Derived& myClass::getDerived(){} const
。
myClass有一个成员变量Base**b
:
#include "Base.h"
Class myClass
{
public:
virtual const Derived& getDerived() const;
.....
protected:
Base**b;
}
派生类继承自Base类:
Class Derived : public Base
{
....
}
我尝试了return b[indexOfDerived];
,错误是:reference to type 'const Derived' could not bind to an lvalue of type 'Base *'
我也尝试过:return *this->b[indexOfDerived];
,错误是:no viable conversion from returned value of type 'Part' to function return type 'const CPU'
如何返回对象的const引用?我很困惑。
我通过以下代码初始化了构造函数中的变量Base**b
:
myClass::myClass()
{
b = new Base*[size];
for(int i = 0; i < size; i++)
{
b[i] = new Base();
}
}
....
// deallocating memory in destructor by using delete and delete[]
....
抱歉语法错误。
答案 0 :(得分:2)
鉴于您的初始化,这是不可能的。 const Derived&
只能引用Derived
类型的对象或Derived
派生的类。
但您只创建了Base
类型的对象。您没有Derived
类型的任何对象。
你可以写一下:
virtual const Derived& getDerived() const
{
return dynamic_cast<Derived const &>(*b[indexOfDerived]);
}
如果有问题的指针实际上没有指向Derived
,则会抛出异常。 (它赢了,直到你在某个地方new Derived
。)
答案 1 :(得分:0)
首先,如果您想要返回Derived
,那么您应该创建Derived
b[i] = new Base();
您必须强制转换才能将Base*
转换为Derived*
const Derived& getDerived() const
{
return *static_cast<Derived const*>( b[0] );
}
考虑使用vector<Base*>
或更好vector<unique_ptr<Base>>
来帮助解决内存管理和异常安全问题。