派生类
自我包含并且有组织的代码片段为模块。 表现形式为:写的代码保存为文件。这个文件就是一个模块
调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基类构造函数。 基类访问只能在构造函数、实例方法或实例属性访问器中进行
多态的作用包括:1、提高了代码的维护性(继承保证);2、提高了代码的扩展性(由多态保证);3、把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 多态是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法
为什么基类中的析构函数要声明为虚析构函数? 用对象指针来调用一个函数,有以下两种情况: 如果是虚函数,会调用派生类中的版本。 如果是非虚函数,会调用指针所指类型的实现版本。 析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊
现在,当你创建一个Role指针,并调用attack()函数时,编译器会调用该指针指向的对应于该对象类型的函数: 在某些情况下,你希望在一个基类中包含一个抽象函数,以便它可以在派生类中被重新定义以适应该类的对象,但是没有有意义的定义给基类中的函数类。 没有定义的抽象成员函数被称为纯虚函数。他们指定派生类自己定义该函数
简单来说,类是一种高级抽象,就是一种高级的数据类型,是对象的蓝图,就是用来定义你要用的对象的属性和行为的。 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法
如果我们在基类中有一个函数,而在派生类中有一个同名函数,那么可以从派生类对象中调用基类函数吗?这是一个有趣的问题,作为实验可以预测以下C++程序的输出。 重载不适用于C++编程语言中的派生类。基类和派生类之间没有重载定义
2. 为什么默认的析构函数不是虚函数? 为实现多态性,可以通过基类的指针或引用访问派生类的成员。也就是说,声明一个基类指针,这个基类指针可以指向派生类对象。 用派生类的实例去初始化基类指针,随后删除这个指针,会导致只有基类的析构函数被调用
让我们通过一个例子来讲解C++中的名字隐藏。在C++中,如果一个类里有一个重载的方法, 你用另一个类去继承它并重写(覆盖)那个方法。你必须重写所有的重载方法, 否则未被重写的方法会因为名字相同而被隐藏,从而使它在派生类中不可见
在 C++ 中,面向对象的三大特征之一多态就是通过虚函数实现,虚函数使用关键字 virtual 声明。意思是,当派生类中重新定义基类中定义的虚函数时,告诉编译器不要静态链接到该函数。而是根据所调用的对象类型来选择调用的函数,这种操作也称为动态链接(或后期绑定)