免费高清素材网站,织梦模板如何安装,网络游戏开服表,建筑企业资质查询网站1.多态基本概念
先来看这样的代码#xff0c;我的本意是想要输出“小猫在说话”#xff0c;但实际输出的却是“动物在说话”。这是因为地址早绑定#xff0c;在代码编译阶段就已经确定了函数地址#xff1b;如果想要实现既定目标#xff0c;那么这个dospeak#xff08;我的本意是想要输出“小猫在说话”但实际输出的却是“动物在说话”。这是因为地址早绑定在代码编译阶段就已经确定了函数地址如果想要实现既定目标那么这个dospeak函数就不能提前绑定需要在运行阶段进行绑定也就是地址晚绑定。
#include iostream
#include fstream
#include string
#include chrono
#include ctime
#include threadusing namespace std;class animal{public: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 cat1;dospeak(cat1);return 0;
}
输出为
动物在说话 把父类的函数定义为虚函数这样这个函数的地址就不是早绑定他需要在代码运行时确定传入的对象再来确定地址这样便完成了地址晚绑定。
#include iostream
#include fstream
#include string
#include chrono
#include ctime
#include threadusing namespace std;class animal{public: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 cat1;dospeak(cat1);return 0;
}
输出为
小猫在说话 这样就叫做多态多态满足条件
* 有继承关系
* 子类重写父类中的虚函数
多态使用条件
* 父类指针或引用指向子类对象
重写函数返回值类型 函数名 参数列表 完全一致称为重写
2.纯虚函数和抽象类
在多态中通常父类中虚函数的实现是毫无意义的主要都是调用子类重写的内容
因此可以将虚函数改为**纯虚函数**
纯虚函数语法virtual 返回值类型 函数名 参数列表 0 ;
当类中有了纯虚函数这个类也称为抽象类
**抽象类特点**
* 无法实例化对象
* 子类必须重写抽象类中的纯虚函数否则也属于抽象类
#include iostream
#include fstream
#include string
#include chrono
#include ctime
#include threadusing namespace std;class Animal
{
public://纯虚函数//类中只要有一个纯虚函数就称为抽象类//抽象类无法实例化对象//子类必须重写父类中的纯虚函数否则也属于抽象类virtual void func() 0;
};class Cat :public Animal
{
public:Cat(string name){name_t new string(name);}virtual void func() {cout *name_t 小猫在说话 endl; //子类必须重写父类中的纯虚函数否则也属于抽象类};string *name_t;
};int main() {Animal *animal new Cat(Tom); // 抽象类无法实例化对象animal-func();delete animal; //记得销毁return 0;
}
输出为
Tom小猫在说话