c++返回一个对象的const引用

c++ returning a const reference of an object

本文关键字:const 引用 一个对象 返回 c++      更新时间:2023-10-16

我是c++的新手,我不知道如何处理这种返回类型:

CCD_ 1。

myClass有一个成员变量Base**b:

#include "Base.h"
Class myClass
{
    public:
         virtual const Derived& getDerived() const;
    .....
    protected:
         Base**b;
}

派生类继承自基类:

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'

如何返回对象的常量引用?我很困惑。

我通过以下代码初始化了构造函数中的变量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[]
....

抱歉语法不正确。

如果进行初始化,这是不可能的。const Derived&只能引用类型为Derived的对象或从const Derived& myClass::getDerived(){} const0派生的类的对象。

但是您只创建了Base类型的对象。您没有任何类型为Derived的对象。

您可以通过以下方式尝试:

virtual const Derived& getDerived() const
{
    return dynamic_cast<Derived const &>(*b[indexOfDerived]);
}

如果所讨论的指针实际上没有指向CCD_ 13。(它不会,除非你在某个地方有new Derived)。

首先,如果您想返回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>>来帮助解决内存管理和异常安全问题。