遍历抽象向量 类
Iterating through vector of abstract classes
已经有一个类似的问题,但是没有回答我的问题所以我再问一次。
我有这个 classes:
#ifndef _OBJECTS_H
#define _OBJECTS_H
#include "ray.h"
#include <cmath>
class Object {
public:
Vector3 position, color;
Object(Vector3 position, Vector3 color): position(position), color(color){};
virtual bool intersects() = 0;
};
class Sphere : public Object {
public:
float radius;
Sphere(Vector3 center, float radius, Vector3 color): Object(center, color), radius(radius){};
using Object::intersects;
bool intersects(const Ray& ray, float& t);
};
#endif
我需要 std::vector
个对象并遍历它:
for(Object s:objects) {
float t;
if (s.intersects(ray, t)) {
//do something
}
}
当我将 intersects()
声明为 pure virtual
时,它告诉我无法遍历虚拟 class,如果我仅将其声明为 virtual
,则它告诉我相交没有实现。我做错了什么?
因为(根据定义)你不能创建抽象 classes 的实例,std::vector<>
不能包含抽象 [=] 的 实例 17=]es。您需要更改容器以包含 pointers。那么指针类型可以是一个指向抽象的指针class.
已经有一个类似的问题,但是没有回答我的问题所以我再问一次。
我有这个 classes:
#ifndef _OBJECTS_H
#define _OBJECTS_H
#include "ray.h"
#include <cmath>
class Object {
public:
Vector3 position, color;
Object(Vector3 position, Vector3 color): position(position), color(color){};
virtual bool intersects() = 0;
};
class Sphere : public Object {
public:
float radius;
Sphere(Vector3 center, float radius, Vector3 color): Object(center, color), radius(radius){};
using Object::intersects;
bool intersects(const Ray& ray, float& t);
};
#endif
我需要 std::vector
个对象并遍历它:
for(Object s:objects) {
float t;
if (s.intersects(ray, t)) {
//do something
}
}
当我将 intersects()
声明为 pure virtual
时,它告诉我无法遍历虚拟 class,如果我仅将其声明为 virtual
,则它告诉我相交没有实现。我做错了什么?
因为(根据定义)你不能创建抽象 classes 的实例,std::vector<>
不能包含抽象 [=] 的 实例 17=]es。您需要更改容器以包含 pointers。那么指针类型可以是一个指向抽象的指针class.