使用指针,未调用重写的方法

JS罗隆

我正在使用指向Primitives的指针向量

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()方法。而是从中调用方法Primitive我只是不知道在这种情况下如何进行对象切片,因为我到处都使用了指针。

Eclipse的告诉我Instanceintersect()方法黑影从方法Primitive这和什么有关系吗?我是C ++的新手,来自Java。任何帮助表示赞赏。

迈克·西摩

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章