0

所以我有一个顶级课程,可以说:

//Top.h
#pragma once
#include <string>
using std::string;

class Top
{
    protected:
        string name;
    public:
        virtual string GetName() = 0;
}

这个类不会有任何对象 Top 实例化,这就是它是一个抽象类的原因。我也有两个中产阶级,比如说:

//MiddleA.h
#pragma once
#include "Top.h"

class MiddleA : public Top
{
    protected:
        int value;
    public:
        MiddleA(string, int);
        string GetName();
        int GetValue();
}

//MiddleB.h
class MiddleB : public Top
{
    protected:
        double factorial;
    public:
        MiddleB(string, double);
        string GetName();
        double GetFactorial();
        double Calculate(int);
}

现在,我需要的是一个数组或任何东西,它可以包含多个 MiddleA、MiddleB 类型的对象或从这两个类继承的任何类。有没有办法在 C++ 中做到这一点?

编辑:在受保护部分添加默认构造函数并使用 Top 的向量或数组是否“可以接受”?

4

2 回答 2

3

使用 C++ 的指针和数组:

typedef std::array<std::unique_ptr<Top>,3> Tops;
Tops tops =
{{
    new MiddleA( "Kuku", 1337 ),
    new MiddleB( "Hoi", 42.0 ),
    new MiddleC()
}};

只有你必须在你的 Top 上有虚拟析构函数。如果没有虚拟析构函数,您只能使用 shared_ptr,当对象被销毁时,其他人将导致未定义的行为。

于 2012-10-17T20:47:35.240 回答
1

是的。你可以这样做。

Top* array[3] = { new Top(parms), new MiddleA(params), new MiddleB(params) };

但您将只能调用 GetName() 函数。您将无法调用其他方法。

于 2012-10-17T20:41:56.837 回答