首页 > 解决方案 > 如何从基对象的派生类访问函数

问题描述

我有一个带有对象的向量数组,我用一些相同的对象填充了它,但我也用一些从基础对象派生的对象填充了它。但我无法访问数组中派生对象的函数。是否可以访问它?

vector<BaseObject*> objects;
if (type == 1)
{
    objects.push_back(new DerivedObject(var1, var2, var3));
}
else
{
    objects.push_back(new BaseObject(var1, var2)); 
}

objects[index]->GetFunctionOnDerivedClass(); // How to do this

标签: c++classinheritance

解决方案


以下示例演示了如何使用基本多态性:

#include <iostream>
#include <vector>

class BaseObject {
public:
    int var1;
    int var2;

    BaseObject(int var1, int var2) : var1{var1}, var2{var2} {}

    virtual void print() const {
        std::cout << "BaseObject{var1=" << var1 << ",var2=" << var2 << "}\n";
    }
};

class DerivedObject : public BaseObject {
public:
    int var3;

    DerivedObject(int var1, int var2, int var3) : BaseObject(var1,var2), var3{var3} {}

    void print() const {
        std::cout << "DerivedObject{var1=" << var1 << ",var2=" << var2 << ",var3=" << var3 << "}\n";
    }
};

int main() {
    constexpr int var1 = 1;
    constexpr int var2 = 2;
    constexpr int var3 = 3;

    std::vector<BaseObject*> objects;
    objects.push_back(new DerivedObject(var1, var2, var3));
    objects.push_back(new BaseObject(var1, var2)); 
    
    objects[0]->print();
    objects[1]->print();
}

这将作为输出

DerivedObject{var1=1,var2=2,var3=3}
BaseObject{var1=1,var2=2}

See Example in CompilerExplorer See Example using smart-pointer in CompilerExplorer


推荐阅读