设为首页 加入收藏

TOP

C++的封装、继承、多态
2017-08-10 10:22:41 】 浏览:377
Tags:封装 继承 多态
面向对象的三大特性:
封装、继承、多态

封装性:
所谓封装性就是将某些东西包装起来,外界无法直接使用,只能通过某些方式才能访问到。面向对象理念是万物皆对象,都有其特征和行为,我们把“成员变量”理解为特征,把“成员函数”理解为行为。被封装的特性只能通过特定的行为去访问。
访问限定符:public、protected、private体现了类的封装。
继承:
继承是通过已有的类派生出新的类,新的类包含已有类的成员对象和成员函数,并且可以增加新的功能,已有的类被称为父类/基类,新的类被称为子类/派生类。
多态:

子类对父类的虚函数进行重写,通过父类指针或引用来指向或引用父类的对象和子类的对象,来实现对子类和父类重写虚函数的调用,从而实现一种接口,多种方法。即多态。多态属于动态绑定(在运行时),重载属于静态绑定。

\

总结:
1、不管那种继承方式,派生类中都可以访问基类中的公有和保护成员,基类的私有成员在派生类中存在但不可见(不能访问)。
2、class默认的继承方式是private的,而struct默认的继承方式是public的

继承体系中需注意的要点:
1、子类的构造函数是合成的,所以初始化子类的构造函数时,必须调用父类的构造函数初始化,不能直接初始化父类的成员变量。
2、在子类中operator=时,需要调用父类的赋值运算符重载,通过::调用。否则会死循环(由于子类对父类隐藏,一直在子类中循环)

 

问:类成员函数的 重载、重写(覆盖)、重定义(隐藏)的区别是什么?
重载:
在同一作用域,可以有一组相同函数名,但不同参数列表的函数,对应着多个同名函数的实现,即一个函数名对应着多个函数体,根据调用时传参的不同而选择调用哪个函数体。
重写(覆盖):
在子类中重写父类的虚函数,子类和父类的函数框架必须一致,即函数名、参数类型、个数必须一致。
重定义(隐藏):
子类中出现与父类同名的成员函数,子类与父类的同名函数参数可不同,当父类的指针指向该函数时便实现了对父类函数的隐藏(即使父类该函数的参数类型更符合)。


重载、重写、重定义的比较:
重载:
1、在同一作用域 2、函数名必须相同,参数个数、类型不同 3、virtual关键字可有可无
重写(覆盖):
1、不同作用域(子类和父类)2、函数名、参数类型、个数一致 3、基类函数必须有virtual关键字
重定义(隐藏):
1、不同作用域(子类和父类)2、函数名相同,参数类型、个数可不同 3、virtual关键字可有可无4、同名函数基类有virtual时,只要不是重写,便是隐藏

协变:两函数返回值不同,但两函数的返回值是父子类关系
协变是重写的一个特例

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++使用librdkafka库实现kafka的.. 下一篇C++异常(二)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目