多态

多态分为两类:静态多态,动态多态

静态多态:函数重载、运算符重载 

动态多态:派生类和虚函数实现运行时多态

静态多态:函数地址早绑定-编译阶段确定函数地址

动态多态:函数地址晚绑定-运行阶段确定函数地址

 

C++允许父类与子类的类型转换,不用作强制类型转换。

#include <iostream>

class Animal{
public:
//静态多态
 void speak(){
    std::cout<<"动物 在说话"<<std::endl;
}
//动态多态
virtual void speak(){
    std::cout<<"动物 在说话"<<std::endl;
}
};

class Cat:public Animal{
    public:void speak(){
        std::cout<<"小猫在说话"<<std::endl;
    }
};

void doSpeak(Animal &animal){
   animal.speak();
}

int main(){
Cat cat;
doSpeak(cat);
}

  

多态原理

多态满足条件:
  有继承关系

   

 

 

 

 

纯虚函数与抽象类

当类中有了纯虚函数,这个类也就是抽象类,

抽象类的特点:

   无法实例化对象

   子类必须重写抽象类中的纯虚函数,否则也属于抽象类

 

纯虚函数语法:  

virtual  返回值类型 函数名  (参数列表)=0

  

 

#include <iostream>

class AbstractDrink{
public:
    //煮水
    virtual void Boil()=0;
    
    //冲泡
    virtual void Brew()=0;

    //倒入杯中
    virtual void PourInCup()=0;

    //加入辅料
    virtual void PutSomething()=0; 

    //制作
    void makeDrink(){
        Boil();
        Brew();
        PourInCup();
        PutSomething();
    }
};


class Coffee:public AbstractDrink{
     virtual void Boil(){
        std::cout<<"煮农夫山泉"<<std::endl;
     };
    
    //冲泡
    virtual void Brew(){
        std::cout<<"冲泡"<<std::endl;
    };

    //倒入杯中
    virtual void PourInCup(){
        std::cout<<"倒入杯中"<<std::endl;
    };

    //加入辅料
    virtual void PutSomething(){
        std::cout<<"加入糖和牛奶"<<std::endl;
    }; 

};

class Tea:public AbstractDrink{
     virtual void Boil(){
        std::cout<<"煮矿泉水"<<std::endl;
     };
    
    //冲泡
    virtual void Brew(){
        std::cout<<"冲泡"<<std::endl;
    };

    //倒入杯中
    virtual void PourInCup(){
        std::cout<<"倒入杯中"<<std::endl;
    };

    //加入辅料
    virtual void PutSomething(){
        std::cout<<"加入枸杞"<<std::endl;
    }; 

};


//制作函数
void doWork(AbstractDrink *abs){
    abs->makeDrink();
    delete abs;
}

int main(){
    doWork(new Coffee);
}

  

posted @ 2024-03-22 21:57  FigureOut  阅读(12)  评论(0)    收藏  举报