C++多态

多态

1.意义

  • 接口的多种不同实现方式
  • 多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数
  • 面向对象中的表述:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法);
  • 也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同行为就是指不同的实现,即执行不同的函数

2.实现

#include <iostream>
#inlcude <string>
using namespace std;

class Box{
public:
    Box(int,int,int);
    virtual void display();
protected:
    int length,height,width;
};
//省略类成员函数实现

class FilledBox:public Box{
public:
    FilledBox(int,int,int,string);
    virtual void display();
privateint weight;
    string fruit;
};

int main(){
Box box(1,2,3);
FilledBox fbox(2,3,4,5,"apple");
Box *pt=&box;//指向基类对象的指针变量
pt->display();
pt = &fbox;//基类指针指向派生类对象;
//在派生类的虚函数表中,派生类的虚函数取代了基类原来的虚函数,因此在使用基类指针指向派生类对象后,调用虚函数时就调用了派生类的虚函数;P157《深度探索C++对象模型》
pt -> display();
return 0;
}

3.纯虚函数

  • 纯虚函数:在基类中声明,没有定义,但要求任何派生类都要定义自己的实现方法。
  • 在函数原型后加“ =0 ” virtual void function() = 0;
  • 虚函数定义:virtual void function();

将函数定义为虚函数,则编译器要求在派生类中必须予以重载以实现多态性。
含有纯虚函数的类为抽象类,不能生成对象。
抽象基类不能被直接调用,必须被子类继承重载以后,再根据要求调用子类的方法,且在子类中一定要实现纯虚函数的定义,不然编译时会出错。

4.虚析构函数

1.构造函数不能声明为虚函数,Why?

  • 因为编译器在构造对象时,必须知道确切类型,才能正确地生成对象;
  • 其次,在构造函数执行之前,对象并不存在,无法使用指向此对象的指针来调用构造函数。

2.析构函数可以声明为虚函数,WHhy?

  • C++明确指出,当派生类对象经由一个基类指针被删除、而该基类带有一非虚析构函数,会导致对象的派生部分没被销毁掉
  • 例子: P62《后台开发:核心技术与应用实践》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值