C++31:继承权限和访问

来源:互联网 发布:中兴联通网络机顶盒 编辑:程序博客网 时间:2024/06/05 01:55

这是C++比较基本的一个知识点,之前忘了写,现在补一下。

C++中包含三种权限控制:public,protected,private。我们一般称之为公有,保护,私有。

三种方式简单来说:

public 对内可以访问,对外可以访问,对于子类可以访问。

protected 对内可以访问,对外不可以访问,对于子类不可以访问。

private 对内可以访问,对外不可以访问,对于子类不可以访问。

public 继承: public--->public,protected---->protected,private--->private。

protected继承: public--->protected,protected---->protected,private--->private

private继承: public--->private,protected---->private,private--->private



其实更多的疑问是,如果类的继承意味着内存布局的拷贝,那么私有成员对于子类来说不可以访问,是不是意味着子类继承的时候,该项数据不存在呢?答案是否定的。我们简单写一段代码测试下:

#include <iostream>using namespace  std;class A {public:int a;protected:int b;private:int c;};class B :public A{};class C :protected A{};class D :private A{};int main(){cout << sizeof(A) << "" << sizeof(B) << "" << sizeof(C) << "" << sizeof(D) << endl;return 0;}

结果全是:12


这也就说明继承的时候,把父类的内存结构给完全复制了过来。但是控制权限的变化以及子类访问权限的控制,应该是由编译器处理。结果就成了我们看到的样子,虽然私有的部分依旧存在,但是内存结构中就是不能访问。


原创粉丝点击