c++ - 如何创建从同一类继承的不同对象的向量?
问题描述
我有不同的对象,例如三角形、平面、球体等,它们都继承自 OBJECTS 类。我想创建这些不同对象的向量,然后遍历每个元素并对它们执行操作。我正在尝试制作光线追踪器,我想创建将许多不同的对象放到场景中,但我不知道如何。OBJECTS 是一个抽象类,所以我不能创建向量,因为我可以创建它的实例。我应该创建一个全新的类并让所有形状类都继承自它吗?或者我应该重新制作对象类,使其不再是抽象的?帮助表示赞赏。我的下一个最佳猜测是对象指针。
解决方案
正如评论所建议的那样,您可以做这样的事情。
class Object{
public:
virtual ~Object()= default;
virtual void foo() = 0;
};
class Pane: public Object{
public:
~Pane() = default;
void foo() override{
std::cout << "Hello Pane" << std::endl;
}
};
class Triangle: public Object{
public:
~Triangle() = default;
void foo() override{
std::cout << "Hello Triangle" << std::endl;
}
};
int main(){
std::vector<std::unique_ptr<Object>> objects;
objects.emplace_back(std::make_unique<Triangle>());
objects.emplace_back(std::make_unique<Pane>());
for(auto &object: objects){
object->foo();
}
return 0;
}
只需创建一个对象指针向量。请注意,您不必使用unique_pointers
,但我强烈建议您使用,因为您不需要在最后删除对象。
这个简单程序的输出是:
Hello Triangle
Hello Pane
推荐阅读
- python - Flask & HTML,表单未提交
- python - 在 pymc3 中拟合非对称高斯参数
- node.js - 如何使用 blob 服务以编程方式删除 Azure 存储中未提交的块?
- python - Python 聊天室“ConnectionResetError: [WinError 10054] 现有连接被远程主机强行关闭”
- kubernetes - kubernetes 如何快速知道一个webhook属于哪个webhookset
- sql - 如何计算 SQL 表列中逗号(',')的数量?
- ios - 如何在 SwiftUI 中显示消息气球?
- php - php ZipArchive 从任何打开的资源中读取
- android - getMacAddress() 在 Android 11 中返回 null?如何获取 Android 11 的 mac 地址?
- visual-studio - Visual Studio:没有为此项目加载任何符号