- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以在我的代码中,我想创建一个类数组。这是因为我想改变他们做事的顺序。然而,我需要这个数组中的类有一个同名但会做不同事情的函数,这取决于被调用的类的类型。
例如,假设我制作了一个汽车数组。每辆汽车都有一个名为 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/
我是一名优秀的程序员,十分优秀!