C++継承練習5
2092 ワード
参考資料:『C++Primer練習問題集(第5版)』
目的:継承階層の構造を練習します.
目的:継承階層の構造を練習します.
#include
#include
#include
using namespace std;
class Figure {// , ;
public:
Figure() = default;// ;
Figure(double x, double y) : xSize(x), ySize(y) {}// ;
virtual ~Figure() = default;// ;// ;
protected:
double xSize, ySize;// ;
};
class Figure_2D : public Figure {// ;// Figure ;
public:
Figure_2D(double x, double y) : Figure(x, y) {}// ;
virtual double area() = 0;// , ;
virtual double perimeter() = 0;// , ;
};
class Figure_3D : public Figure {// ;// Figure ;
public:
Figure_3D(double x, double y, double z) : Figure(x, y), zSize(z) {}// ;
virtual double cubage() = 0;// , ;
protected:
double zSize;// z ;
};
class Rectangle : public Figure_2D {// , ;
public:
Rectangle(double x, double y) : Figure_2D(x, y) {}// ;
virtual double area() override {// , ;
return xSize * ySize;
}
virtual double perimeter() {// , ;
return 2 * (xSize + ySize);
}
};
class Circle : public Figure_2D {// , ;
public:
Circle(double x, double y) : Figure_2D(x, y) {}// ;
virtual double area() override {// , ;
return 3.1415926 * xSize * xSize;// xSize = ySize = ;
}
virtual double perimeter() {// , ;
return 2 * 3.1415926 * xSize;// xSize = ySize = ;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
Rectangle *r = new Rectangle(4, 5);
cout << r -> area() << endl;
cout << r -> perimeter() << endl;
Circle *c = new Circle(2, 2);
cout << c -> area() << endl;
cout << c -> perimeter() << endl;
delete c;
delete r;
return 0;
}
/*
20
18
12.5664
12.5664
*/