У меня есть следующий код правильно Теперь: < /p>
Код: Выделить всё
celestial_body.hppКод: Выделить всё
#pragma once
#include
#include
#include
class CelestialBodyBase {
public:
CelestialBodyBase(std::string name, double mass, double radius)
: name(name), mass(mass), radius(radius), position({0.0, 0.0, 0.0}) {}
virtual ~CelestialBodyBase() = default;
virtual void update() = 0;
protected:
std::string name;
double mass;
double radius;
Vector3 position;
};
template
class CelestialBody : public CelestialBodyBase {
public:
CelestialBody(std::string name, double mass, double radius)
: CelestialBodyBase(name, mass, radius) {}
void update() { derived()->update(); }
private:
T* derived() { return static_cast(this); }
};
< /code>
planet.hppКод: Выделить всё
#pragma once
#include
class Planet : public CelestialBody {
friend class CelestialBody;
public:
Planet(std::string name, double mass, double radius);
~Planet();
void update();
};
< /code>
planet.cppКод: Выделить всё
#include
Planet::Planet(std::string name, double mass, double radius)
: CelestialBody(name, mass, radius) {}
Planet::~Planet() {}
void Planet::update() {
// Update planet
// ...
}
< /code>
As you can see, there is a constructor which is basically the same for all 3 classes being defined here. Mind that I have the CelestialBodyBaseПодробнее здесь: https://stackoverflow.com/questions/794 ... efinitions
Мобильная версия