c ++返回对象的const引用

时间:2016-03-28 00:04:45

标签: c++

我是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[]
....

抱歉语法错误。

2 个答案:

答案 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>>来帮助解决内存管理和异常安全问题。