01
2020
04

封装、继承、多态、虚函数

a、封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式


好处:将变化隔离、便于使用、提高复用性、提高安全性


原则:将不需要对外提供的内容隐藏起来,把属性隐藏,提供公共方法对其访问


b、继承:提高代码复用性;继承是多态的前提


注:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可自己用this指定自身的其他构造函数


c、多态:是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象


好处:提高了程序的扩展性


弊端:当父类引用指向子类对象时,虽提高了扩展性,但只能访问父类中具备的方法,不可访问子类中的方法;即访问的局限性。


目的:封装可以使得代码模块化,继承可以扩展已经存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。


d、虚函数:被virtual关键字修饰的成员函数


作用:实现多态性,多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。


不能声明为虚函数的是:构造函数。因为构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。析构函数可以为纯虚函数。


e、纯虚函数存在的意义:


在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以生出狮子、老虎等子类,但是动物本身生成对象明显不合常理。为了解决这个问题,方便使用累的多态性,引入了纯虚函数,将函数定义为纯虚函数(方法:virtual Return Type Function()=0;),则编译器要求在派生类中必须予以重写以实现多态类。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。


使用纯虚函数的情况:1、当想在基类中抽象出一个方法,且该基类只能被继承,而不能被实例化;2、这个方法必须在派生类(derived class)中被实现;


f、虚函数与纯虚函数的区别


虚函数是为了重载和多态,在基类中是有定义的,即便定义为空。在子类中可以重写。


纯虚函数在基类中没有定义,必须在子类中加以实现。


多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。


子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。