【发布时间】:2015-12-27 07:26:53
【问题描述】:
#include<iostream>
class A {
public:
int a;
protected:
void func() {
std::cout<<"protected member"<<endl;
}
};
class B:public A
{
public:
using A::func; //Isn't this violation of encapsulation?
};
int main(){
B b;
b.func();
return 0;
}
为什么上面的代码运行成功?
不违反封装的概念吗?
如果我错了,请纠正我。
【问题讨论】:
-
“封装”是什么意思?
-
由 B 的设计者决定使用什么接口,包括提供对 A 的受保护成员的访问权限。
-
为什么上面的代码运行不成功?为什么会违反封装的概念?既然它没有,你需要先向我们解释你的错误信念,然后我们才能纠正它。
-
我看到您还发布了有关 Java 的问题。当涉及到编程的“概念”时,C++ 和 Java 有很多不同之处。它们在很多方面都是非常不同的语言。这是其中之一。
-
所以事实证明,我不需要像这样显式继承受保护的成员 `class B: protected A`。如果我仍然错了,请纠正我。
标签: c++ oop encapsulation