Предположим, у меня есть суперкласс, который предлагает общедоступный метод шаблонов. Подклассам придется выполнять некоторые под-операции. Как объявить эти подоператоры, чтобы они могли быть вызваны только из SuperClass
? Там protected
, но это работает наоборот, насколько я знаю: подклассы могут получить доступ к защищенным членам суперкласса. Я хочу, чтобы суперклассы (и только суперклассы!) Вызывали элементы подкласса.Метод доступен только из суперклассов (C++ и других языков)
class SuperClass{
public:
void templateMethod(){
this->op1();
this->op2();
}
// how to declare these? public? protected?
virtual void op1() = 0;
virtual void op2() = 0;
}
class SubClass : public SuperClass{
// how to declare these? public? protected?
virtual void op1() { ... };
virtual void op2() { ... };
}
Я в настоящее время работает в C++ и Matlab, но я также очень заинтересованы в некоторых общих замечаний, рассматривающих другие языки.
В C++, они могут быть открытыми, защищены или частным. Это зависит от того, хотите ли вы предоставить их в своем базовом классе. Обычно я занимаюсь «частным», если нет веских оснований для этого. Но вы должны ограничить это одним языком программирования, если вы точно не знаете, что поведение во всех случаях одинаково. – juanchopanza
Метод 'private' можно вызвать из суперклассов? Не знал этого. Но это имеет смысл, поскольку они «фактически» объявлены в этом суперклассе. – Michael
Да, это общий шаблон. «Метод шаблона» или что-то в этом роде. Некоторые люди используют 'protected', обычно без уважительной причины, но' private' будет работать нормально. – juanchopanza