C++多态

目录

1.多态概念

2.多态的定义和实现

2.1多态的定义

2.2虚函数

2.3虚函数的重写

2.4重载,重写(覆盖),重定义(隐藏)对比

3.抽象类


1.多态概念

不同的对象做同一件事,具有不同的结果。

例:拿买票举例,儿童买票会享受半价,成人买票只能全价,儿童和成人两个对象,都去执行买票这件事,儿童是半价,成人是全家。

2.多态的定义和实现

2.1多态的定义

1. 必须通过基类的指针或者引用调用虚函数。

2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写

class person
{
public:
   virtual void BuyTicket()
    {
        cout << "全价票" << endl;
    }
};

class children : public person
{
    virtual void BuyTicket()
    {
        cout << "半价票" << endl;
    }
};

void fun(person * A)
{
    A->BuyTicket();
}

int main()
{
    person A;
    children B;
    fun(&A);
    fun(&B);

}

2.2虚函数

virtual修饰的函数为虚函数

 virtual void BuyTicket()
    {
        cout << "全价票" << endl;
    }

2.3虚函数的重写

派生类中由一个和基类完全相同的虚函数,称子类的虚函数重写了基类的基函数。

析构函数的重写:只要基类的析构函数为虚函数,那么派生类的析构函数,即使名字不相同也构成重写。因为析构函数无论叫什么名字在编译之后都叫destructor

2.4重载,重写(覆盖),重定义(隐藏)对比

重载:1.在同一作用域

           2.函数名相同 参数不同

重写:1.两个函数分别在基类和派生类

           2.函数名/参数/返回值都必须相同

           3.必须是虚函数

隐藏:1.两个函数分别在基类和派生类

           2.函数名相同

           3.不构成重写

3.抽象类

概念:在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。

例:

class Car
 {
  public:
  virtual void Drive() = 0;
 };
 class Benz :public Car
 {
  public:
   virtual void Drive()
  {
   cout << "Benz-舒适" << endl;
  }
 };
 class BMW :public Car
 {
  public:
  virtual void Drive()
  {
   cout << "BMW-操控" << endl;
  }
 };
 void Test()
 {
  Car* pBenz = new Benz;
  pBenz->Drive();
  Car* pBMW = new BMW;
  pBMW->Drive();
 }

抽象类强制派生类重写虚函数

因为如果不重写,就会把纯虚函数继承过来,派生类也变成抽象类了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值