[英]C++ - Array of pointers to classes
我希望这里有人可以帮助我。
这就是我的问题:我有一个主班和另外三个班。 现在,我想创建一个数组,每个索引指向这些类之一。 我知道如何通过这样的一门课来做到这一点:
Class1* array[10];
然后我可以将其用于每个索引:
array[i] = new Class1;
但是可以声明一个数组然后使用类似的东西吗?
array[0] = new Class1;
array[1] = new Class2;
array[2] = new Class3;
亲切的问候,Synotix
是的,您可以这样做,但是为此,您必须在C ++中使用继承和多态。
你能做的是。 创建一个父类,即
Class parent {
// Some common code here
// Some virtual function here
}
然后从您的父类继承您的所有类(如您的情况),分别是Class1,Class2,Class3。 还要在父类中创建一个虚拟方法以获得C ++中的多态性。
这样,您将可以执行此操作。
parent * allClasses[10];
allClasses[1]= new Class1();
allClasses[2]= new Class2();
allClasses[3]= new Class3();
这是您想要的完整示例。 检查此链接有人可以解释多态的好处吗?
有可能,但是您想对阵列做什么? 如果您的所有类都有一个通用的基类,则可以定义数组以包含指向该基类的指针,然后可以将类添加到数组中。
为了使用您的类,您将需要通过基类上的virtual
方法来实现。
一些建议:我建议您的基类具有virtual
析构函数,这意味着当delete
数组的元素时,它将在派生类上调用析构函数。 另外,我建议使用智能指针而不是原始指针,因此您无需调用delete
。 这是一个示例,我使用了vector
而不是数组和类模板来定义类:
#include <memory>
#include <vector>
#include <iostream>
class MyBase {
public:
virtual ~MyBase() {}
virtual void hello() = 0;
};
template<int N>
class MyClass : public MyBase {
public:
virtual void hello(){ std::cout << "Hello, I am Number" << N << std::endl; }
};
int main() {
std::vector<std::unique_ptr<MyBase>> my_classes;
my_classes.emplace_back(new MyClass<1>());
my_classes.emplace_back(new MyClass<2>());
my_classes.emplace_back(new MyClass<3>());
for(auto& my_class : my_classes)
my_class->hello();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.