多态
多态分为两类:静态多态,动态多态
静态多态:函数重载、运算符重载
动态多态:派生类和虚函数实现运行时多态
静态多态:函数地址早绑定-编译阶段确定函数地址
动态多态:函数地址晚绑定-运行阶段确定函数地址
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);
}
浙公网安备 33010602011771号