Yog*_*ora 9 c++ inheritance encapsulation
class X
{
protected:
void protectedFunction() { cout << "I am protected" ; }
};
class Y : public X
{
public:
using X::protectedFunction;
};
int main()
{
Y y1;
y1.protectedFunction();
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以公开基类的一个功能.
Myk*_*yev 18
你是自己做的.
你可以写
class Y : public X
{
public:
void doA()
{
protectedFunction();
}
};
int main()
{
Y y1;
y1.doA();
}
Run Code Online (Sandbox Code Playgroud)
我认为没有理由担心它.
受保护的函数是继承树中可重用逻辑的一部分.你可以隐藏它们,如果有一些内部逻辑或限制,或者像你的情况那样你可以暴露它,如果你确定这不会伤害任何人.
Otá*_*cio 12
是的,这就是为什么受保护已经受到了公平的批评.
C++的创建者Bjarne Stroustrup在他的优秀着作"C++的设计和演变"中对此感到遗憾:
我对受保护的一个担忧正是因为它太容易使用一个共同的基础,就像人们可能已经习惯使用全局数据一样....回想起来,我认为受保护是一个"好的论据"和时尚克服的情况我更好的判断力和接受新功能的经验法则.
And*_*yes 11
我认为正是Stroustrup本人说C++中内置的封装和数据完整性功能旨在让诚实的人保持诚实,而不是阻止犯罪分子.
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |