我是多态的新手,这是与this类似的问题,但解决方案对我没有帮助。 确切的错误是:
Circle.cpp(34):错误C2259:'Circle':无法实例化抽象类 由于以下成员: 'void Shape :: particle(const Ray&,const int&)':是抽象的
我试过阅读这个以及我认为clone()成员函数,调用Circle的复制构造函数将其状态复制到新创建的Circle对象并尝试初始化'particle'(其中)它不能)。 如果我是对的:我该如何纠正? 如果我错了......它在做什么(我做错了什么)以及如何纠正它。
class Shape {
public:
virtual void particle(const Ray& ray, const int& count) = 0;
...
virtual Shape* clone() const = 0;
private:
vector<Ray> incoming_ray;
vector<int> counts;
};
class Circle : public Shape {
public:
Circle* clone() const; //covariant return type
virtual void
particle(const Ray& ray, const int& count);
...
};
然后
Circle* Circle::clone() const { return new Circle(*this); }
void
Circle::particle(const Ray& rays, const int& count){
incoming_ray.push_back(inc_ray);
counts.push_back(counts);};
我试过
virtual void particle(const Ray& ray, const int& count) const = 0;
^
但仍然遇到同样的错误?
由于
答案 0 :(得分:3)
virtual void particle(const Ray& ray, const int& count) const = 0;
^^^^^^
使它成为一种完全不同的方法。与以下内容不同:
virtual void particle(const Ray& ray, const int& count) = 0;
最终,您拥有的是派生类中的一个新方法,它是纯虚方法,它不会覆盖Base类纯虚方法。由于没有覆盖,它会为你的派生类留下一个它没有实现的继承的纯虚函数,它也使你的派生类成为抽象类。
覆盖基类虚方法您需要在Base类中使用完全相同的方法定义来覆盖它(尽管允许 Co-variant类型)。