使用指针,不会调用重写方法

时间:2015-05-08 14:36:06

标签: c++ oop pointers polymorphism

我正在使用指向anonymous s:

的指针向量
Primitive

我在其中放置一个指向vector<Primitive*> primitives; 派生类的指针,即Primitive

Instance

这是Shape * s = new Sphere(); PhongMaterial* mat = new PhongMaterial(this, 0.6, 0.15, 0.2, Color(1, 0, 0), 50); Instance* redSphere = new Instance(s, mat); redSphere->scale(1, 10, 1); primitives.push_back(redSphere);

Instance.h

这是class Instance: public Primitive { private: Transform* invTransform; public: Instance(Shape * const s, Material* const mat); bool intersect(const Ray& ray, float& tmin, Intersection& isct); bool shadow_hit(const Ray& ray, float& tmin); void scale(float a, float b, float c); ~Instance() { ; } };

Primitive.h

这就是我使用它的方式:

class Primitive {
private:
Shape* shape;
Material* material;

public:
Primitive(Shape * const s, Material* const mat);

bool intersect(const Ray& ray, float& tmin, Intersection& isct);

bool shadow_hit(const Ray& ray, float& tmin);

~Primitive() {
    ;
}
};

我的问题是循环从不调用for (int i = 0; i < primitives.size(); i++) { float t; if (primitives[i]->intersect(ray, t, iTmp) && t < tMin) { tMin = t; isect = iTmp; } } Instance方法。相反,它从intersect()调用方法。在这种情况下,我只是不知道对象切片是如何发生的,因为我到处都在使用指针。

Eclipse告诉我Primitive的{​​{1}}方法阴影来自Instance的方法。这与任何事都有关系吗?我是C ++的新手,来自Java。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

如果函数是虚拟的,您只能覆盖它:

virtual bool intersect(const Ray& ray, float& tmin, Intersection& isct);
^^^^^^^