practical_exercises/10_day_practice/day6/readme.md
一、多态性 多态性:多态就是在同一个类或继承体系结构的基类与派生类中,用同名函数来实现各种不同的功能。
静态绑定又称静态联编,是指在编译程序时就根据调用函数提供的信息,把它所对应的具体函数确定下来,即在编译时就把调用函数名与具体函数绑定在一起。
动态绑定又称动态联编,是指在编译程序时还不能确定函数调用所对应的具体函数,只有在程序运行过程中才能够确定函数调用所对应的具体函数,即在程序运行时才把调用函数名与具体函数绑定在一起。
编译时多态性: ---静态联编(连接)----系统在编译时就决定如何实现某一动作,即对某一消息如何处理.静态联编具有执行速度快的优点.在C++中的编译时多态性是通过函数重载和运算符重载实现的。 运行时多态性: ---动态联编(连接)----系统在运行时动态实现某一动作,即对某一消息在运行过程实现其如何响应.动态联编为系统提供了灵活和高度问题抽象的优点,在C++中的运行时多态性是通过继承和虚函数实现的。
二、虚函数
虚函数的意义
1、基类与派生类的赋值相容
派生类对象可以赋值给基类对象。 派生类对象的地址可以赋值给指向基类对象的指针。 派生类对象可以作为基类对象的引用。 赋值相容的问题: 不论哪种赋值方式,都只能通过基类对象(或基类对象的指针或引用)访问到派生类对象从基类中继承到的成员, 不能借此访问派生类定义的成员。
2、虚函数使得可以通过基类对象的指针或引用访问派生类定义的成员。
3.Virtual关键字其实质是告知编译系统,被指定为virtual的函数采用动态联编的形式编译。
4.虚函数的虚特征:基类指针指向派生类的对象时,通过该指针访问其虚函数将调用派生类的版本。
三、纯虚函数和抽象类
1.纯虚函数概念?
仅定义函数原型而不定义其实现的虚函数 Why pure function? 实用角度:占位手段place-holder 方法学:接口定义手段,抽象表达手段 How? class X { virtual ret_type func_name (param) = 0; } 2.抽象类概念?
What is an abstract class? 包含一个或多个纯虚函数的类 Using abstract class 不能实例化抽象类 但是可以定义抽象类的指针和引用 Converting abstract class to concrete class 定义一个抽象类的派生类 定义所有纯虚函数
3.C++对抽象类具有以下限定