предположите, что класс имеет частные элементы данных, но методы set и методы считывания находятся в общедоступном объеме. Если Вы наследовались этому классу, можно все еще назвать те методы set и методы считывания - включение доступа к частным элементам данных в базовом классе. Как это возможно, так как упоминается, что производный класс не может наследовать частные элементы данных
Производный класс не наследует доступ к частным элементам данных. Однако он наследует полный родительский объект, который содержит все закрытые члены, объявленные этим классом.
Поскольку геттеры и сеттеры являются общедоступными
- они могут быть вызваны кем угодно, а не только производными классами.
Геттеры и сеттеры не дают вам полного контроля над частными элементами данных. Контроль по-прежнему принадлежит базовому классу.
Это зависит от типа наследования. Если вы наследуете частным образом, то производный класс НЕ имеет доступа к закрытым членам Base.
Access public protected private
-----------------------------------------------------------
members of the same class yes yes yes
members of derived classes yes yes no
not members yes no no
Использование шаблона
class MyClass {
private: int a;
public: void setA(int x) { a = x; }
public: int getA() const { return a; }
};
кажется объектно-ориентированным и имеет отправку инкапсуляции.
Однако , как вы заметили, вы все еще можете получить прямой доступ к частному полю, и нет ничего лучше, если просто сделать
общедоступным и получить к нему прямой доступ.
Использование таких методов получения и установки не имеет смысла в C ++.