C++公有继承,保护继承,私有继承的区别
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++公有继承,保护继承,私有继承的区别相关推荐
- 关于C++中公有继承、私有继承、保护继承的讨论
一.文章来由 简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题. 二.冗长的定义 我们先来看看这些冗长的定义: 公有继承: 当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性 ...
- 《C++ Primer Plus》14.2 私有继承 学习笔记
C++(除了成员变量之外)还有另一种实现has-a关系的途径--私有继承. 使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员. (如果使用保护继承,基类的公有成员和保护成员都将称为派生类 ...
- C++中公有继承、保护继承、私有继承
就class之间的关系做一个简单的定义,继承base class的class,base class可以认为class都是自己的子女. 1.public:public表明该数据成员.成员函数是对所有用户 ...
- 公有继承/私有继承/保护继承的区别
1.公有继承–public 公有继承时,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员.派生类的对象只能访问派生类的公有成员(包 ...
- C++ | 公有,私有,受保护成员以及继承时的作用
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- 浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)
派生类和基类之间的特俗关系是基于C++继承的底层模型的. 总所周知,C++具有三种继承:公有继承.私有继承.保护继承. 最常见的就是公有继承,它建立一种is-a的关系. 如何理解is-a呢?即派生类对 ...
- C++_类和对象_C++继承_继承的方式_公共继承_保护继承_私有继承---C++语言工作笔记062
然后我们再去看c++中的继承,现在我们来看,c++中继承的, 3种方式. 去看上面的图,可以看到,有公共继承,有保护继承,有私有继承.3种方式. 我们去写代码去看看.首先,我们写个Base1类, 然后 ...
- 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 继承同名静态成员处理 ...
- 私有继承与保护继承(protected 成员)
私有继承(private): 继承的访问控制: 基类的public和protected成员:都以private身份出现在派生类中 基类的private成员:不可直接访问 访问权限: 派生类中的成员函数 ...
最新文章
- OpenStack 业务链networking-sfc介绍 (2) - 底层原理
- Linux 线程实现机制分析
- HBase 1.x Coprocessor使用指南
- HTML5学习笔记(一):初步印象
- PHPOK企业网站建设的内容管理系统 v5.7源码
- OSI七层模型及应用
- matlab怎么设clim,Python Matplotlib.pyplot.clim()用法及代码示例
- Oracle插入时间
- 如何精准鉴别菜鸟和老手程序员 网友:精辟!
- java.util.Random 类的 nextInt(int num )
- 【java笔记】Collections集合工具类
- 安装-apache skywalking (java 应用性能监控)
- 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_3 响应之返回值是void类型...
- Java小开发(汽车租赁系统)
- 在文档中怎么画横线实线_word怎么画横线虚线?word文档怎么画线条?
- Verilog学习日志(2021.7.31)
- 基于Lae的ffmpeg播放器
- Chrome快捷键,电脑高手都这样用
- c语言.jpg图片转成数组_Heic图片格式转换器
- Cobble Web 页面操作记录