繁体   English   中英

Circle的C ++构造函数继承

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM