私は何かに質問をしました。 string
とint
の引数を持つcurrentCircle
というCircleオブジェクトを作成しようとすると、変数currentCircle
を抽象タイプに宣言できないというエラーが表示されます。シェイプは抽象クラスだと思っていましたが、サークルオブジェクトを宣言する別の方法はありますか?クラス階層C++
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"
#include "Triangle.h"
int main() {
// Shape circle1("blue");
Circle currentCircle("blue", 5);
cout << "Printing all shapes...\n";
currentCircle.print();
return 0;
}
Shapeクラス(抽象基底クラス)
class Shape {
public:
Shape() : color("") { }
Shape(const string& newColor) : color(newColor) { }
virtual ~Shape();
virtual void print() const { cout << color; }
virtual void print() = 0;
virtual double getArea() = 0;
private:
string color;
};
円クラス(派生クラス)
#include "Shape.h"
class Circle : public Shape {
public:
Circle(const string& newColor, int newRadius);
virtual ~Circle();
double getArea();
void print() const;
private:
int radius;
};
Circle::Circle(const string& newColor, int newRadius) {
radius = newRadius;
Shape(newColor);
}
double Circle::getArea() {
return (3.14*radius*radius);
}
void Circle::print() const{
print(Shape);
cout << "circle, radius " << radius;
}
コードには完全な欠陥があります。ここで本を書くのに必要なのは、あなたの質問に答えるための基礎を拾い読みする必要があるということです。これは意図したスタックオーバーフロー形式には広すぎます。 –
または、 'Shape'に' virtual void print()= 0; 'を取り除いてください – NathanOliver
これは本当ですか?あなたが知っているコードまたはあなたが始まったコード? – NathanOliver