【发布时间】:2012-11-22 16:30:40
【问题描述】:
这样做合理吗?
注意:这是一个最小的工作示例
class A {
public:
int getX() { return x; }
protected:
int x;
virtual void setX(int newX) = 0;
};
// Children can modify X
class Can_Modify_X : public A {
protected:
void setX(int newX) { x = newX; }
private:
using A::x;
};
// Children can't modify X
class Can_Not_Modify_X : public A {
private:
void setX(int newX) { }
using A::x;
};
我知道我 can't simply hide 一个函数,因为这会违反 Liskov 原则,但是执行 private 继承并再次指定所有公共方法似乎真的是多余的。
这两个类必须有一个共同的父类(即使它直接是其中之一),并且不能直接修改x。
BONUS:有人可以指出我在这种情况下定义using 的确切行为的地方吗?我尝试用谷歌搜索它,但收效甚微。
【问题讨论】:
-
但这是一个纯粹的虚拟,它的可见性甚至无关紧要,因为它的孩子可以在实现它时改变它。在这里只重要的是其他实体不能创建 A* 并从那里调用虚函数。还是不行?
-
“你不能”是什么意思?它确实编译了,我在这里打破了什么?
标签: c++ inheritance attributes virtual using-declaration