Базовый класс Фигура с полем «название фигуры» и методом «Печать названия». Производный класс Шар с полем Радиус. Переопределить для него функцию Печать так,чтобы она выводила данные о шаре на экран. Описать в классе дополнительную функцию Объем, вычисляющую объем фигуры и печатающую результат на экран.
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Figura
{
protected:
string name;
public:
Figura(string name){ this->name = name; }
void show_name() { cout << name << endl; }
};
class Shar : public Figura {
protected:
float radius;
public:
Shar(string name, float radius):Figura(name) {this->radius = radius; }
void show_name() {cout <<"Фигура: " << name << endl; }
void vRadius() {
v = (4*M_PI*radius*radius*radius)/3;
cout << "Объем шара: " <<v<<endl;
}
private:
float v;
};
int main() {
Figura f("Фигура");
f.show_name();
cout<<"----------------------------------"<<endl;
Shar shar("Шар",7);
shar.show_name();
shar.vRadius();
}
для инициализации вместо присваивания в теле конструктора
this->name = name;
лучше использовать более эффективную во всех отношениях инициализацию полей в списке инициализации конструктора
Figura(string name)
: name(name){
}
тоже относится и к классу Shar, в котором вы, кстати, использовали этот способ, но не полностью
Shar(string name, float radius):Figura(name){
this->radius = radius;
}
этот конструктор лучше записать так
Shar(string name, float radius)
: Figura(name), radius(radius){
}
приватное поле v используется только как локальная переменная в методе vRadius, поэтому ее, стоило бы сделать локальной переменной в этом методе. Но, если вы планируете впоследствии использовать рассчитанное значение, то приватное поле для нее - это нормально. Но тошда стоит придерживаться принципа - одна функция - одно действие(логическое) Т.е. vRadius не должна вычислять значение объема и выводить его. Стоит разделить ее на две функции. Одну - для вычисления объема, вторую для отображения объема
void calcVolume() {
v = (4*M_PI*radius*radius*radius)/3;
}
void show_volume() {
cout << "Объем шара: " <<v<<endl;
}
ну, а так как объем шара однозначно зависит от радиуса, то можно перенести вычисление объема в конструктор и инициализировать его сразу при создании объекта
Shar(string name, float radius)
: Figura(name), radius(radius), v(4*M_PI*radius*radius*radius/3){
}
В итоге получиться так
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Figura{
protected:
string name;
public:
Figura(string name)
: name(name){}
void show_name() {
cout << name << endl;
}
};
class Shar : public Figura {
protected:
float radius;
public:
Shar(string name, float radius)
: Figura(name), radius(radius), v(4*M_PI*radius*radius*radius/3){
}
void show_name(){
cout <<"Фигура: " << name << endl;
}
void show_volume() {
cout << "Объем шара: " <<v<<endl;
}
private:
float v;
};
int main() {
Figura f("Фигура");
f.show_name();
cout<<"----------------------------------"<<endl;
Shar shar("Шар",7);
shar.show_name();
shar.show_volume();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Определить координаты малейшего интервала с целочисленными координатами концов, на который приходятся значения элементов действительной...
Встал перед вопросом, как считать числа из текстового файла напрямую в массив
Как передать файл в функцию вроде разобралсяНо есть непонятные моменты