类的三方法:封装,继承,多态。
封装:使用一整套方法去创建一个新的类型,这叫类的封装。
继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承。
多态:当有几个不同的子类对象时,对象调用的函数会依据对象类型来调用相应类型的成员函数。

继承

1. 继承的主要目的是为了代码复用。
创建子类对象时,先创建父类,再创建子类。
析构时,先析构子类,再析构父类。

2. 访问权限:public, protected, private.
protected表示这种成员可以被子类继承和访问,但是外界却像private一样不可访问。
父类的private成员并不是不继承,而是对子类扩展的成员函数不可见。

public派生规则:
父类成员访问权限 子类继承自父类成员的访问限定
public public
protected protected
private 不可见

protected派生规则:
父类成员访问权限 子类继承自父类成员的访问限定
public protected
protected protected
private 不可见

private派生规则:
父类成员访问权限 子类继承自父类成员的访问限定
public private
protected private
private 不可见

3. 类型转换

父类A子类B
A *p = new B; 可以
B *p = new A; 不可以
p调用的成员方法为父类(A)的方法,非子类B的成员方法。属编译时绑定(因p的指针类型为A *),如要访问子类,需要使用多态(父类相应方法定义为virtual)。

A a;
B *p;
p = &a; 可以
p访问成员变量时可能越界(因p的成员变量多余a)

多态

声明为vitual的成员函数称为虚函数。
有虚函数的类都有一个隐含的指针成员vptr,指向一个虚函数表。(一个类一个)
每个父类或子类都各自有一张虚函数表。在构造对象时,对象的vptr成员指向该类的虚函数表。
包含虚函数的类的sizeof应多加4个字节,用于存放vptr(虚函数表指针)。

一旦某个函数在父类中声明为virtual,在所有继承它的子类中这个函数也是virtual的,子类可以不必写virtual关键字。

声明为virtual的函数,在运行时确定执行体,属动态绑定,dynamic binding。调用子类的具体实现。如果一个成员函数声明为virtual并在末尾加上=0而没有提供函数的实现,称为虚函数,拥有虚函数的类称为抽象类,抽象类不能实例化(或者说不能创建该类的对象),而只能被其他类继承。

抽象类也称为接口,继承了某个抽象类也称实现了某个接口。

CPP_封装_继承_多态的更多相关文章

  1. php面向对象的三大特征 封装,继承,多态

    对象的主要三个特性 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型. 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为 ...

  2. OC的封装、继承与多态

    面向对象有三大特征:封装.继承和多态. 一.封装 封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问.简而言之,信息隐藏,隐 ...

  3. 2、C#面向对象:封装、继承、多态、String、集合、文件(上)

    面向对象封装 一.面向对象概念 面向过程:面向的是完成一件事情的过程,强调的是完成这件事情的动作. 面向对象:找个对象帮你完成这件事情. 二.面向对象封装 把方法进行封装,隐藏实现细节,外部直接调用. ...

  4. PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)

    PHP面向对象三大特点学习 学习目标:充分理解抽象.封装.继承.多态   面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象:我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和 ...

  5. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...

  6. C++封装、继承、多态

    C++封装继承多态总结 面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重 ...

  7. OOP三个基本特征:封装、继承、多态

    面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...

  8. 1.C#基础篇-->封装、继承和多态

    面向对象三要素:封装.继承和多态.正确理解这三个要素,才能在编程中建立面向对象的思想. 1.封装使用篇 作用:好的封装增加代码的可读性,易于维护. 什么情况下使用封装,封装的原则是? 1>功能相 ...

  9. C实现面向对象封装、继承、多态

    参考资料:      http://blog.chinaunix.net/uid-26750235-id-3102371.html      http://www.eventhelix.com/rea ...

随机推荐

  1. python .dcm文件读取,并转化为.jpg格式

    .dcm文件是DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信中记录医学图像和相关信息的文件,在用于医学图像处理的时候我们 ...

  2. haproxy 日志配置

    haproxy日志配置 haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件.下面以centos6.4为例,haprox ...

  3. [LeetCode] Meeting Rooms I & II

    Meeting Rooms Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s ...

  4. 腾讯云服务器 - 安装redis3.2.9以及集群

    redis大家都知道,服务器上必不可少的,那么在生产环境下安装的步骤和虚拟机里也是差不多的 官网上最新稳定版是3.2.9,而4.0的更新比较大,但是比几个还是beta版嘛 下载并且上传压缩包至云服务器 ...

  5. Vivado神器之DocNav

    Vivado2014安装完成以后会有2个文件出现在桌面上,具体如下图: 上一个是vivado的软件,是主要的工具,但是一定不要忽略下面一个DocNav,今天我要讲的就是这个工具,打开一个会看到这样一个 ...

  6. iphone开发之解决viewWillAppear失效

    转自:http://linuxstuding.iteye.com/blog/1224399 你可曾遇到过viewWillAppear没有被调用到的情况 产生原因是用了UINavigationContr ...

  7. Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量

    之前一篇文章介绍了Burpsuite如何抓取使用了SSL或TLS传输的Android App流量,那么IOS中APP如何抓取HTTPS流量呢, 套路基本上与android相同,唯一不同的是将证书导入i ...

  8. 每日英语:Booming Tech Sector Redraws the Map

    China's high-tech companies have made their mark on the nation's economy. Now, with growing cash and ...

  9. MyBatis 问题列表

    问题表现:The content of elements must consist of well-formed character data or markup 解决办法:1.配置的动态SQL语句里 ...

  10. 【ARM】2410裸机系列-按键查询式控制led

    开发环境   硬件平台:FS2410 主机:Ubuntu 12.04 LTS LED灯原理图 按键原理图 按键的接线资源 KSCAN0 -> GPE11    KSCAN1 -> GPG6 ...