一、继承的作用

若A类继承了B类,可以使A类获得B类中的部分成员变量和成员函数,这能使程序员在已有类的基础上重新定义新的类。继承是类的重要特性,当A类继承了B类,我们称A类为派生类或子类,B类为基类或父类。

派生类能够从基类中得到的成员由基类中成员的访问权限有关。关于成员的访问权限,以下将会继续讨论。

二、继承中的访问权限

【例】继承的语法

class B
{
public :
int num1;
protected:
int num2;
private:
int num3;
} class A : public B
{ }

上面的例子里,A类继承了B类,

A类能够得到 B类中访问权限是 protected 和 public 的成员。

而B类中 private 的成员A类是无法继承的。

具体的访问权限可以看下面的表格:

三、三种继承方式

派生类不同的继承方式会影响从基类继承来的成员的访问属性,不同的继承方式不会影响能从基类继承的成员,也就是说基类里私有的(private )成员仍然无法继承

class A : 继承方式 B

{

}

三种继承方式

public:不改变从继承来的成员的访问属性。

protected :继承来的成员访问属性设置为 protected

private:继承来的成员访问属性设置为 private

四、继承的构造、析构、拷贝

1、在继承时先调用父类的构造函数,再调用子类的构造函数

2、在继承中先调用子类的析构,在调用父类的析构

3、在调用拷贝构造时会先调用父类的拷贝构造,再调用子类的拷贝构造

4、在C++中继承可以有多个父类,在构造时会按继承表的顺序调用父类的构造函数。

5、在析构时子类会先调用自己的析构函数,然后再按照继承表的逆序调用父类的析构函数

五、继承中要注意的问题

1、继承虽然可以获取父类中的成员,但子类中如果有同名成员,那么子类的成员将会隐藏掉继承来的成员

2、父子类中的函数不可以形成重载,实际上父子类之间并不在同一作用域,因此也不会形成重载

标准C++(4)继承的更多相关文章

  1. 读书笔记 effective c++ Item 54 让你自己熟悉包括TR1在内的标准库

    1. C++0x的历史渊源 C++标准——也就是定义语言的文档和程序库——在1998被批准.在2003年,一个小的“修复bug”版本被发布.然而标准委员会仍然在继续他们的工作,一个“2.0版本”的C+ ...

  2. JavaScript 原型与继承机制详解

    引言 初识 JavaScript 对象的时候,我以为 JS 是没有继承这种说法的,虽说 JS 是一门面向对象语言,可是面向对象的一些特性在 JS 中并不存在(比如多态,不过严格来说也没有继承).这就困 ...

  3. 【C++ Primer | 15】继承的构造函数

    继承的构造函数 子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递.如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数. cl ...

  4. Javascript开发笔记:不完整的继承

    Javascript的继承和标准的oop继承有很大的区别,Javascript的继承是采用原型链的技术,每个类都会将“成员变量”和“成员函数”放到 prototype 上,Js++都过supercla ...

  5. python基础----isinstance(obj,cls)和issubclass(sub,super)、反射、__setattr__,__delattr__,__getattr__、二次加工标准类型(包装)

    一.isinstance(obj,cls)和issubclass(sub,super)                                isinstance(obj,cls)检查是否ob ...

  6. C&C++——标准库

    1.什么是C&C++的标准库? C语言被发明出来时并没有什么库函数,随着C语言的流行,越来越多的厂商或者机构组织开始提供C的编译器,并且同时把经常用到的函数封装成“库”的形式发布:不同的组织发 ...

  7. 【前端】JavaScript继承实现的四种方式

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/4770235.html 一.继承的实现方法 1.原型链继承 这个继承最为简单,它的实现原理是,每一个AO对象都有一 ...

  8. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

  9. 《Effective Python》笔记——第3章 类与继承

    一.尽量用辅助类来维护程序的状态 如下,用字典存储简单数据 class SimpleGradebook(): def __init__(self): self.__grades = {} def ad ...

  10. HttpUrlConnection

    •HttpUrlConnection是java的标准类,继承UrlConnection类,二者都是抽象类.其对象主要通过URL的                                     ...

随机推荐

  1. values.xml:3:5-58:857: AAPT: error: resource android:attr/fontVariationSettings not found.

    修改app/build.gradle中的版本 compileSdkVersion 28 targetSdkVersion 28 具体不知道为何要修改为28,但在android/build.gradle ...

  2. 双系统安装Linux的步骤以及一些误区

    1.一次安装失败引发的思考 笔者安装双系统(Windows 7+ Ubuntu 16.01)时参考了如何安装win10和linux [ubuntu14]双系统这篇百度经验,却发现安装后并没有如期进入U ...

  3. CC13:回文链表

    题目 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例: {1,2,3,2,1} 返回:true {1,2,3,2, ...

  4. Django-Rest-Framework的版本和认证

    Django-Rest-Framework的版本和认证   restful framework DRF的版本 版本控制是做什么用的,我们为什么要用 首先要知道版本是干嘛用的,我们知道开发项目的时候有多 ...

  5. centos虚拟机安装指定版本docker

    环境: centos 7.6+ docker-ce 17.03.2 安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 ...

  6. (转)使用参数SQL_SLAVE_SKIP_COUNTER处理mysql slave同步错误讨论

    使用参数SQL_SLAVE_SKIP_COUNTER处理mysql slave同步错误讨论 本文链接地址:http://blog.chinaunix.net/uid-31396856-id-57532 ...

  7. windows 安装 jdk1.8并配置环境变量

    1.查看电脑环境 我的电脑--右键--属性 2.下载jdk1.8 网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-do ...

  8. Css+Html

    CSS样式 <style type="text/css"> tt.tt1 { <style type="text/css"> p { b ...

  9. tcp的三次连接握手和四次释放握手

    http://blog.csdn.net/whuslei/article/details/6667471/ 这篇博客讲的很清楚. 下面我简单说明一下:三次连接握手,首先client发送请求报文,然后服 ...

  10. 如何在github中的readme.md加入项目截图

    1. 先在之前的本地项目文件夹里创建一个存放截图的文件夹.(如img文件夹) 2. 将新增的内容通过github desktop上传到github中 3. 在github中立马能看到刚刚上传的图片,打 ...