[英]C++ Constructor Inheritance of Circle
我在从Point2D
类继承的圆形构造函数中遇到了麻烦。
shape.h :
#pragma once
class Shape {
public:
virtual float area() const = 0;
virtual float circumference() const = 0;
};
Point2D.h :
#pragma once
#include "Shape.h"
template<class T>
class Point2D : public Shape {
protected:
T x, y;
public:
Point2D() : x(0), y(0) { }
Point2D(T x, T y) : x(x), y(y) { }
T getX() const;
T getY() const;
void setX(T x);
void setY(T y);
};
template<class T>
T Point2D<T>::getX() const {
return x;
}
template<class T>
T Point2D<T>::getY() const {
return y;
}
template<class T>
void Point2D<T>::setX(T x) {
Point2D<T>::x = x;
}
template<class T>
void Point2D<T>::setY(T y) {
Point2D<T>::y = y;
}
Circle.h :
#pragma once
#include "Point2D.h"
#include "CustomException.h"
template<class T>
class Circle: public Point2D<T> {
protected:
T x, y, radius;
public:
Circle() : x(0), y(0), radius(0){}
Circle(T x, T y, T radius) : Point2D<T>(x,y), radius(radius) { }
T getRadius() const;
void setRadius(T radius);
virtual float area();
virtual float circumference();
};
template<class T>
T Circle<T>::getRadius() const {
return radius;
}
template<class T>
void Circle<T>::setRadius(T radius) {
Circle<T>::radius = radius;
}
template<class T>
float Circle<T>::area() {
return 3.14*radius*radius;
}
template<class T>
float Circle<T>::circumference() {
return 3.14*2*radius;
}
我得到这些错误:
error: invalid new-expression of abstract class type ‘Circle<int>’
Circle<int> *circleInt = new Circle<int>(2, 2, 4);
because the following virtual functions are pure within ‘Circle<int>’:
class Circle: public Point2D<T> {
virtual float Shape::area() const
virtual float area() const = 0;
virtual float Shape::circumference() const
virtual float circumference() const = 0;
为什么会出现这些错误? 我怎样才能解决这个问题?
刚知道! 由于我需要从shape.h中覆盖虚拟方法area()和圆周(),因此需要更改area()和圆周()的方法。 而且他们总是需要更改为常量方法。
virtual float area(); >>>>>> float area() const override;
virtual float circumference; >>>>>> float area() const override;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.