继承&多态
继承
概念
继承是面向对象复用的重要手段
继承是类型之间的关系建模,共享公有的东西,实现各自本质不同的东西
三种继承关系
public
protected
private
赋值兼容规则
子类对象可以赋值给父类对象(切割/切片)
父类对象不能赋值给子类对象
父类的指针/引用可以指向子类对象
子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)
继承体系中的作用域
在继承体系中基类和派生类都有独立的作用域
隐藏:子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问。
(在子类成员函数中,可以使用 基类:基类成员 访问)
注意在实际中继承体系里面最好不要定义同名成员
类的六个默认成员函数
在继承关系里面,在派生类中如果没有显式定义这六个成员函数,编译系统会默认合成这六个默认的成员函数。
构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载、const修饰的取地址操作符重载
继承的种类
单继承
----->一个子类只有一个直接父类
多继承
----->一个子类有两个或以上直接父类
多重继承
菱形继承
虚继承
多态
概念
虚函数
子主题 1
子主题 2
子主题 3
子主题 4
分类
动态多态(晚绑定)
前提:以封装和继承为基础、2个或2个以上类
virtual关键字
虚析构函数
解决问题:子类构造函数中从堆中申请对象,造成内存泄漏
静态多态(早绑定)
编译之前就确定使用哪个函数
纯虚函数
继承体系同名成员函数的关系
重载
在同一作用域
函数名相同,参数不同
返回值可以不同
覆盖(重写)
不在同一作用域(分别在基类和派生类)
函数名、参数、返回值都相同(协变例外)
基类函数必须有virtual关键字
访问修饰符可以不同
隐藏(重定义)
不在同一作用域(分别在基类和派生类)
函数名相同
在基类和派生类中只要不构成重写就是重定义
本文出自 “zgw285763054” 博客,请务必保留此出处http://zgw285763054.blog.51cto.com/11591804/1845575
原文地址:http://zgw285763054.blog.51cto.com/11591804/1845575