Я изучаю C ++ OO Design, и я столкнулся со следующей проблемой, где я должен использовать абстрактные классы и наследование.
Я работаю над проблемой, где я должен использовать абстрактный класс, называемый Shape
, которая должна содержать виртуальную функцию с именем get_area()
, которая возвращает double
.
Класс Circle
наследует класс Shape
и содержит функции конструктора и члена:
Circle(double radius)
double get_radius()
void set_radius(double radius)
double get_area()
Класс Square
наследует класс Shape
и содержит:
Square(double width)
double get_width()
void set_width(double width)
double get_area()
Класс Rectangle
наследует Square
класс и содержит:
Rectangle(double width, double height)
double get_height()
void set_height(double width)
double get_area()
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class Shape {
public:
Shape();
virtual double get_area() const = 0;
};
// Circle sub-class
class Circle : public Shape {
private:
double r;
public:
Circle(double radius) : Shape() {
r = radius;
}
void set_radius(double radius) {
r = radius;
}
double get_radius() {
return r;
}
virtual double get_area() const {
return 3.14159 * pow(r, 2);
}
};
// Square sub-class
class Square : public Shape {
protected:
double w;
public:
Square(double width) : Shape() {
w = width;
}
void set_width(double width) {
w = width;
}
double get_width() const {
return w;
}
virtual double get_area() const {
return w * w;
}
};
/*
// Rectangle sub-class
class Rectangle : public Shape, public Square {
private:
double h, w;
public:
Rectangle(double width, double height) : Shape(){
h = height;
w = width;
}
void set_heigth(double height) {
h = height;
}
void set_width(double width) {
w = width;
}
double get_height() const {
return h;
}
double get_width() const {
return w;
}
virtual double get_area() const {
return h * w;
}
};
*/
// -------------------------------------------------------------------
int main() {
Circle c(5.5);
cout << "\t" << c.get_radius() << endl;
//Rectangle r(4.2, 2.5);
//cout << "\t" << r.get_width() << " " << r.get_height() << endl;
return 0;
}
Что на самом деле делает:
неопределенная ссылка на 'Shape :: Shape ()
Класс Rectangle
также выдает ошибкуВот почему он комментируется
Что нужно сделать: я должен иметь возможность создать объект из любого из этих классов с именем Circle c
и получить площадь, введя радиус.