CPP_封装_继承_多态
类的三方法:封装,继承,多态。
封装:使用一整套方法去创建一个新的类型,这叫类的封装。
继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承。
多态:当有几个不同的子类对象时,对象调用的函数会依据对象类型来调用相应类型的成员函数。
继承
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_封装_继承_多态的更多相关文章
- php面向对象的三大特征 封装,继承,多态
		
对象的主要三个特性 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型. 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为 ...
 - OC的封装、继承与多态
		
面向对象有三大特征:封装.继承和多态. 一.封装 封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问.简而言之,信息隐藏,隐 ...
 - 2、C#面向对象:封装、继承、多态、String、集合、文件(上)
		
面向对象封装 一.面向对象概念 面向过程:面向的是完成一件事情的过程,强调的是完成这件事情的动作. 面向对象:找个对象帮你完成这件事情. 二.面向对象封装 把方法进行封装,隐藏实现细节,外部直接调用. ...
 - PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
		
PHP面向对象三大特点学习 学习目标:充分理解抽象.封装.继承.多态 面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象:我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和 ...
 - 初步理解Java的三大特性——封装、继承和多态
		
声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...
 - C++封装、继承、多态
		
C++封装继承多态总结 面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重 ...
 - OOP三个基本特征:封装、继承、多态
		
面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...
 - 1.C#基础篇-->封装、继承和多态
		
面向对象三要素:封装.继承和多态.正确理解这三个要素,才能在编程中建立面向对象的思想. 1.封装使用篇 作用:好的封装增加代码的可读性,易于维护. 什么情况下使用封装,封装的原则是? 1>功能相 ...
 - C实现面向对象封装、继承、多态
		
参考资料: http://blog.chinaunix.net/uid-26750235-id-3102371.html http://www.eventhelix.com/rea ...
 
随机推荐
- xcode修改项目名后反复出现 clang error
			
xcode修改项目名后反复出现 clang error, 提示 ld: file not found . 并且该错误并不是出现在项目编译阶段,而是项目的Tests 的link阶段, 同时提示 xct ...
 - js 获取元素所有兄弟节点实例
			
比如一个ul里面有10个li,而第3个li上有特殊的样式(比如颜色为红色,其他为黑色).我想把其他所有li——不包括红的li——的颜色也设为红色,此时,就需要获得红li的所有兄弟节点. 兄弟,就是和你 ...
 - C# 类中索引器的使用
			
索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便.直观的被引用.索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用.定义 ...
 - docker-compose教程(安装,使用, 快速入门)
			
1.Compose介绍Docker Compose是一个用来定义和运行复杂应用的Docker工具.一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose不再需要使用she ...
 - Ubuntu 14.04 静态IP设置, ping通win7
			
ubuntu 14.04以后不支持 /etc/init.d/networing restart命令,使用ifdown et0 和ifup eth0 使用echo $?查看上一次命令执行的结果 ifdo ...
 - 安装SQL Server提示“等待数据库引擎恢复句柄失败”
			
1.如果MSSQLSERVER服务已经启动,则停止. 2.以管理员身份打开命令行,执行命令:"C:\Program Files\Microsoft SQL Server\MSSQL10_50 ...
 - Atitit gui界面ui技术发展史与未来趋势
			
Atitit gui界面ui技术发展史与未来趋势 1. Gui技术的发展,从像素自绘到native控件体系,再到dsl h51 1.1. 编程语言的发展 从机器语言,汇编语言到本地native语言(c ...
 - iPhone:动态获取UILabel的高度和宽度
			
转自:http://www.cnblogs.com/spiritstudio/archive/2011/11/17/2252074.html 在使用UILabel存放字符串时,经常需要获取label的 ...
 - python常用运维脚本实例
			
转载 file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 ...
 - [Windows Azure]The Autoscaling Application Block
			
The Autoscaling Application Block 5 out of 6 rated this helpful - Rate this topic ...