gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:48:46 25 4
gpt4 key购买 nike

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

例如,假设我制作了一个汽车数组。每辆汽车都有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com