c++ - 具有相同功能的继承 : How can I make an array of different classes,,在 C++ 中做不同的事情?

标签 c++ inheritance

所以在我的代码中,我想创建一个类数组。这是因为我想改变他们做事的顺序。然而,我需要这个数组中的类有一个同名但会做不同事情的函数,这取决于被调用的类的类型。

例如,假设我制作了一个汽车数组。每辆汽车都有一个名为 drive() 的函数,用于确定其行驶速度。我制作了一个汽车数组“CarArray[]” 在其中,我放入了两种类型的类,本田和福特。本田和丰田都继承自汽车的基类。它们都有一个名为 drive() 的函数。如果我调用 CarrArray[].drive() 并且我得到一辆本田,它应该输出一个不同的值,而不是如果空间被一辆福特占用。

例如,假设我以 10 英里/小时的速度驾驶本田,以 30 英里/小时的速度驾驶福特。

我的阵列看起来像这样:

CarArray [0]//本田

CarArray [1]//福特

CarArray [2]//本田

如果我调用 CarArray[0].drive() 我应该达到 10 mph

但如果我调用 CarArray[1].drive,我应该达到 30 mph。

既然是数组。我可以操纵类并切换它们,以便获得不同的值。

在我的程序中,我想做的不仅仅是打印出值,但我希望你明白这一点。

这是我的测试代码。

        #include <iostream>

using namespace std;


class BaseClass{
public:

 virtual void OutPut();

protected:

        int BaseData;
};
void BaseClass::OutPut(){
    cout<< "BaseClass printed something"<<endl;
}

class BaseA: public BaseClass{
public:

 virtual void OutPut();

protected:

        int BaseData;
};

void BaseA::OutPut(){
    cout<< "BaseA printed something"<<endl;
}

 class BaseB: public BaseClass{
public:

 virtual void OutPut();

protected:

        int BaseData;
};

void BaseB::OutPut(){
    cout<< "BaseB printed something"<<endl;
}
int main()
{


BaseA Class1;
BaseB Class2;

BaseClass BaseArray[2];

BaseArray[0] = Class1;
BaseArray[1] = Class2;

BaseArray[0].OutPut();
BaseArray[1].OutPut();


return 0;
}

最佳答案

使用容器 - <a href="http://www.cplusplus.com/reference/vector/vector/" rel="noreferrer noopener nofollow">vector</a>应该足够了:

#include <vector>

// <- your other code

std::vector<BaseClass*> myArray;
myArray.push_back(new BaseA);
myArray.push_back(new BaseB);

for(unsigned int i=0;i<myArray.size();i++){
   myArray[i]->OutPut();
}

如果您真的想坚持使用数组,请这样声明:

Base* array[SIZE];

Base** array = new Base*[SIZE];

并像vector一样使用它以上:

for(unsigned int i=0;i<SIZE;i++){
   array[i]->OutPut();
}

在这两种情况下 - 不要忘记调用 delete如果您使用 new 分配对象,则在完成程序之前在每个元素上.当然你也可以在这两种情况下通过地址添加对象:

BaseB someObj;
myArray.push_back(&someObj);

关于c++ - 具有相同功能的继承 : How can I make an array of different classes,,在 C++ 中做不同的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820610/

相关文章:

c++ - 保持 .exe 时间戳不变

c++ - 在 vc++ 中进行串行通信需要哪些函数?

C++ 通过继承实现的基于组件的架构被认为是好的做法吗?

c# - 抽象类的派生类中的额外方法

c++ - 如何在基于派生类的大小的基构造函数中分配数组?

java - 如何在接口(interface)上有效利用继承和多态性

c++ - visual c++ 2010调试问题

.dll 中的 C++ CRITICAL_SECTION 对象给出未解析的外部符号错误

C++ 从参数参数包创建 vector 或列表

c++ - Eigen:基类模板特化中的类型推导