C/C++

Посмотрите пожалуйста правильность написания кода С++

#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include <cstdlib>

class Body
{
public:
virtual double Area() const = 0;
virtual double Volume() const = 0;
};

class Parallelepiped: public Body
{
public:
Parallelepiped(double l, double w, double h) : length(l), width(w), height(h) {}
virtual double Area() const {
return 2 * (length * width + length * height + width * height);
}
virtual double Volume() const { return length * width * height; }
private:
double length, width, height;
};

class Ball: public Body
{
public:
Ball(double r) : radius(r) {}
virtual double Area() const { return 4 * M_PI * radius * radius; }
virtual double Volume() const { return 4 * M_PI * pow(radius, 3) / 3; }
private:
double radius;
};

int main()
{
setlocale(LC_ALL, "Russian");
int l, w, h, r;
std::cout << "Радиус: "; std::cin >> r;
std::cout << "Длина: "; std::cin >> l;
std::cout << "Ширина: "; std::cin >> w;
std::cout << "Высота: "; std::cin >> h;
Body * p = new Parallelepiped(l, w, h);
Body * b = new Ball(r);
std::cout << "Площадь параллелепипеда: " << p->Area() << "\nОбъём параллелепипеда: " << p->Volume();
std::cout << "\nПлощадь Шара: " << b->Area() << "\nобъём шара: " << b->Volume();
return 0;
}
S M
S M
400
// Найдите отличия...

#include <iostream>
#include <vector>
#include <cmath>
#include <cstdlib>

using namespace std;

struct Body {
virtual const char* name()const = 0;
virtual double area() const = 0;
virtual double volume() const = 0;
virtual ~Body() = 0;
inline static const auto pi = 3.1415926535897932;
};

Body::~Body() {};

class Parallelepiped : virtual public Body {
public:
Parallelepiped(double l, double w, double h) : length(l), width(w), height(h) {}
~Parallelepiped()override {}
const char* name()const override {
return "Параллелепипед";
}
double area() const override {
return 2.0 * (length * width + length * height + width * height);
}
double volume() const override {
return length * width * height;
}
private:
double length, width, height;
};

class Ball : virtual public Body {
public:
Ball(double r) : radius(r) {}
~Ball()override {}
const char* name()const override {
return "Шар";
}
double area() const override {
return 4.0 * pi * radius * radius;
}
double volume() const override {
return 4.0 * pi * pow(radius, 3) / 3.0;
}
private:
double radius;
};

double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}

void show(const Body* ptr) {
cout << ptr->name() << ":"
<< "\t\n- площадь: " << ptr->area()
<< "\t\n- объём: " << ptr->volume()
<< '\n';
}

int main() {
system("chcp 1251 > nul");
auto radius = real("Радиус: ");
auto length = real("Длина: ");
auto width = real("Ширина: ");
auto height = real("Высота: ");
Ball ball{ radius };
Parallelepiped parallelepiped{ length, width, height };
vector<Body*> box{ &ball, &parallelepiped};
for (const auto& ptr : box) show(ptr);
puts("");
vector<Body*> fox{ new Parallelepiped{2.17, 3.18, 2.91 }, new Ball{ 1.75 } };
for (const auto& ptr : fox) {
show(ptr);
delete ptr;
}
system("pause > nul");
}
ВС
Виталий Скоцик
86 629
Лучший ответ
S M это же почти такой же код что и у меня
S M можете пожалуйста помочь с написанием комментарий (//) к коду?
правильность написания - это когда отсутствуют ошибки и код работает правильно..
S M Помогите пожалуйста в коде С++ написать комментарии через двойной слеш (//), что обозначают выполняют функции (строчки) кода
Можно докопаться до того, что есть утечка памяти (которая самоустраняется при выходе), т. е. если использовали new, то обязаны использовать и delete, либо не использовать динамическое распределение памяти в данном случае, либо использовать умные указатели
Арел
Арел
30 155
S M Помогите пожалуйста в коде С++ написать комментарии через двойной слеш (//), что обозначают выполняют функции (строчки) кода
S M типо за что отвечают строчки например (virtual double), что они делают в коде