【发布时间】:2016-06-20 21:19:22
【问题描述】:
假设我有一个提供公共模板方法的超类。子类必须实现一些子操作。如何声明此子操作以确保它们只能从 SuperClass 调用?有protected,但据我所知,这是相反的:子类可以访问受保护的超类成员。 我想允许超类(并且只允许超类!)调用子类成员。
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++ 中,它们可以是公共的、受保护的或私有的。这实际上取决于您是否要在基类中公开它们。我通常会选择
private,除非有充分的理由不这样做。但是你应该将其限制为一种单一的编程语言,除非你确定行为是相同的。 -
可以从超类调用
private方法?不知道那个。但这是有道理的,因为它们是在该超类中声明的virtually。 -
是的,这是一种常见的模式。 “模板方法”或类似的东西。有些人使用
protected,通常没有充分的理由,但private可以正常工作。 -
您的问题很广泛,没有人可以解释一组未知编程语言的可见性规则。我建议更新问题并首先询问 C++。如果您以后在将概念适应另一种语言时遇到问题,请提出一个新问题。
标签: java c++ matlab oop template-method-pattern