gpt4 book ai didi

c++ - 使用指针,不调用重写的方法

转载 作者:行者123 更新时间:2023-11-28 00:16:14 24 4
gpt4 key购买 nike

我正在使用指向 Primitive 的指针 vector :

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() 方法 shadows 来自 Primitive 的方法。这有什么关系吗?我是 C++ 的新手,来自 Java。感谢您的帮助。

最佳答案

你只能重写一个虚函数:

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

关于c++ - 使用指针,不调用重写的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com