1.公有继承–public

公有继承时,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象只能访问派生类的公有成员(包括继承的公有成员),访问不了保护成员和私有成员。

#include <iostream>
using namespace std;class Base
{
public: Base(int nId) {mId = nId;}int GetId() {mId++;cout<< mId<<endl;return mId;}
protected:int GetNum() {cout<< 0 <<endl;return 0;}
private: int mId;
};class Child : public Base
{
public:Child() : Base(7) {;}int GetCId() {return GetId();}    //新增成员可以访问公有成员int GetCNum() {return GetNum();}  //新增成员可以访问保护成员//无法访问基类的私有成员
protected:int y;
private:int x;
};int main()
{ Child child;child.GetId();        //派生类的对象可以访问派生类继承下来的公有成员//child.GetNum();     //无法访问继承下来的保护成员GetNum()child.GetCId();   child.GetCNum();      //派生类对象可以访问派生类的公有成员//child.x;//child.y;            //无法访问派生类的保护成员y和私有成员xreturn 0;
}

2.保护继承–protected

保护继承中,基类的公有成员和保护成员被派生类继承后变成保护成员,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象不能访问派生类继承基类的公有成员,保护成员和私有成员。

class Child : protected Base
{
public:Child() : Base(7) {;}int GetCId() {return GetId();}   //可以访问基类的公有成员和保护成员int GetCNum() {return GetNum();}
protected:int y;
private:int x;
};int main()
{ Child child;//child.GetId();//派生类对象访问不了继承的公有成员,因为此时保护继承时GetId()已经为          protected类型//child.GetNum(); //这个也访问不了child.GetCId();child.GetCNum();return 0;
}

3.私有继承–private

私有继承时,基类的公有成员和保护成员都被派生类继承下来之后变成私有成员,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象不能访问派生类继承基类的公有成员,保护成员和私有成员。

class Child : private Base
{
public:Child() : Base(7) {;}int GetCId() {return GetId();}   //可以访问基类的公有成员和保护成员int GetCNum() {return GetNum();}
protected:int y;
private:int x;
};int main()
{ Child child;//child.GetId();//派生类对象访问不了继承的公有成员,因为此时私有继承时GetId()已经为          private类型//child.GetNum(); //派生类对象访问不了继承的保护成员,而且此时私有继承时GetNum()已经为          private类型child.GetCId();child.GetCNum();return 0;
}

4.总结

不管是哪种继承方式,派生类中新增成员可以访问基类的公有成员和保护成员,无法访问私有成员。而继承方式影响的是派生类继承成员访问属性,而使用友元(friend)可以访问保护成员和私有成员。
派生类对象的访问权限

C++公有继承,保护继承,私有继承的区别相关推荐

  1. 关于C++中公有继承、私有继承、保护继承的讨论

    一.文章来由 简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题. 二.冗长的定义 我们先来看看这些冗长的定义: 公有继承: 当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性 ...

  2. 《C++ Primer Plus》14.2 私有继承 学习笔记

    C++(除了成员变量之外)还有另一种实现has-a关系的途径--私有继承. 使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员. (如果使用保护继承,基类的公有成员和保护成员都将称为派生类 ...

  3. C++中公有继承、保护继承、私有继承

    就class之间的关系做一个简单的定义,继承base class的class,base class可以认为class都是自己的子女. 1.public:public表明该数据成员.成员函数是对所有用户 ...

  4. 公有继承/私有继承/保护继承的区别

    1.公有继承–public 公有继承时,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员.派生类的对象只能访问派生类的公有成员(包 ...

  5. C++ | 公有,私有,受保护成员以及继承时的作用

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  6. 浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)

    派生类和基类之间的特俗关系是基于C++继承的底层模型的. 总所周知,C++具有三种继承:公有继承.私有继承.保护继承. 最常见的就是公有继承,它建立一种is-a的关系. 如何理解is-a呢?即派生类对 ...

  7. C++_类和对象_C++继承_继承的方式_公共继承_保护继承_私有继承---C++语言工作笔记062

    然后我们再去看c++中的继承,现在我们来看,c++中继承的, 3种方式. 去看上面的图,可以看到,有公共继承,有保护继承,有私有继承.3种方式. 我们去写代码去看看.首先,我们写个Base1类, 然后 ...

  8. c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)

    目录 4.6 继承 4.6.1 继承的基本语法 4.6.2 继承方式 4.6.3 继承中的对象模型 4.6.4 继承中构造和析构顺序 4.6.5 继承同名成员处理方式 4.6.6 继承同名静态成员处理 ...

  9. 私有继承与保护继承(protected 成员)

    私有继承(private): 继承的访问控制: 基类的public和protected成员:都以private身份出现在派生类中 基类的private成员:不可直接访问 访问权限: 派生类中的成员函数 ...

最新文章

  1. OpenStack 业务链networking-sfc介绍 (2) - 底层原理
  2. Linux 线程实现机制分析
  3. HBase 1.x Coprocessor使用指南
  4. HTML5学习笔记(一):初步印象
  5. PHPOK企业网站建设的内容管理系统 v5.7源码
  6. OSI七层模型及应用
  7. matlab怎么设clim,Python Matplotlib.pyplot.clim()用法及代码示例
  8. Oracle插入时间
  9. 如何精准鉴别菜鸟和老手程序员 网友:精辟!
  10. java.util.Random 类的 nextInt(int num )
  11. 【java笔记】Collections集合工具类
  12. 安装-apache skywalking (java 应用性能监控)
  13. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_3 响应之返回值是void类型...
  14. Java小开发(汽车租赁系统)
  15. 在文档中怎么画横线实线_word怎么画横线虚线?word文档怎么画线条?
  16. Verilog学习日志(2021.7.31)
  17. 基于Lae的ffmpeg播放器
  18. Chrome快捷键,电脑高手都这样用
  19. c语言.jpg图片转成数组_Heic图片格式转换器
  20. Cobble Web 页面操作记录

热门文章

  1. JS 异步加载js的三种方案
  2. dubbo原理和机制
  3. 小粉兔简易计算器——一只小巨子
  4. pymysql安装过程
  5. java打包成exe(带图片,不放大)
  6. 如何从Excel单元格的身份证号码中提取出生日期、性别
  7. js 封装格式化时间函数
  8. 【Python】字符串转整数
  9. foursquared 3
  10. 汽车电子软件开发需知