C++语法细微(五)(多态虚函数)

来源:互联网 发布:算法第四版mobi 编辑:程序博客网 时间:2024/06/05 07:46

多态(polymorphism)
多态性是指觉有不同功能的函数可以用一个函数名 这样就可以用一个函数名调用不同内容的函数
想不同德对象发送同一消息 不同的对象接收到时会产生不同的行为
静态多态性和动态多态性
静态多态性是在程序编译时就能决定的(函数重载 运算符重载)
动态多态性是在程序运行过程中决定的(通过虚函数(Vritual Function))

虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且通过基类指针或引用来访问基类和派生类中的同名函数
!!!!:本来基类的指针是用来指向基类对象的 如果用指向派生类对象,则进行指针类型转换将派生类对象的指针先转换为基类的指针,所以基类指针指向的是派生类对象中的基类部分。
虚函数的使用:
(1)再基类用vritual声明成员函数为虚函数,这样就可以在派生类中重新定义此函数 为它赋予新的功能 并能方便的被调用
(2)当一个成员函数别声明为虚函数时 其派生类中的同名函数都自动成为虚函数 因此在派生类重新声明该虚函数时 可以加virtual 也可以不加,习惯上每层都加上virtual 使程序更加清晰

静态关联和动态关联
函数重载属于静态关联(static binding)(Early binding)
虚函数的多态属于动态关联(dynamic binding)(late binding)

只能用虚函数声明类的成员函数 而不能将普通的函数声明为虚函数
虚析构函数 一个类的析构函数声明为虚析构函数之后 所有派生此类的类的构造函数都变成虚的析构函数
虚析构函数体现在多态上(当基类的指针指向子类的实例 在delete指针的时候 调用的是子类的析构函数 (当然 子类的析构函数又会自动调用父类的析构函数))

纯虚函数(pure virtual function)
纯虚函数没有函数体 只有一个函数声明“被初始化为0的函数”
virtual 函数类型 函数名(参数表列) = 0;
纯虚函数没有函数体 后面的 =0 也不表示函数值返回0 这是一个声明语句 应该有分号 不能被调用
抽象类(abstract class)包含纯虚函数的类都是抽象类
纯虚函数不能被调用 含有纯虚函数的类是不能声明对象的

如果一个类包含一个或者一个以上的纯虚函数 这个类就是抽象基类 抽象类是不能定义也没必要定义对象的
在类的层次结构中 顶层或者最上面的几层可以是抽象基类

原创粉丝点击