Да, это возможно, я прочитал комментарии, и я понял, что вы хотите, чтобы базовый член был закрытым, один из вариантов - наследовать конструктор базового класса.
Классы Пример 1
class Entity{
private:
int x;
public:
Entity(int i = 0) : x(i) {} //initialize x to 0
int getX() {return x;}
};
class Player: public Entity{
public:
Player() : Entity(1) {} //inherit base class constructor initializing x to 1
};
Эта реализация имеет потенциальную слабость, она позволяет создавать объекты, инициализирующие x
. Если вы не хотите этого, вы можете иметь защищенный конструктор, который позволяет производным классам указывать значение члена, предотвращая создание объектов, которые могут инициализировать x
.
Классы Пример 2
class Entity {
int x = 0;
public:
Entity() = default; //default construtor
int getX(){return x;}
protected:
Entity(int i) : x(i) {} //protected constructor,
};
class Player : public Entity {
public:
Player() : Entity(1) {}
};
Использование
#include <iostream>
using std::cout;
using std::endl;
int main()
{
Entity e;
cout << e.getX() << endl;
Player p;
cout << p.getX();
return 0;
}
В зависимости от сложности ваших классов вы также можете сделать защищенного строителя явным
Вывод
0
1
Обратите внимание, что это очень упрощенная версия, вы должны соблюдать правила построения классов, например, Правило трех /five/zero.