[](()1.实现多态的三个先决条件
-
进行了类的继承;
-
子类与父类写了结构相同的函数(并且基类的函数是虚的);
-
使用了基类指针指向了子类的对象
[](()2.语法
//语法(条件1,2):
calss A{
public:
virtual void print(){}
};
class B:public A{
public:
void print(){}
};
//语法(条件3)
int main(){
A *p;
B q;
p=&q;(基类的指针指向子类的对象)//此时便可以进行多态实现
return 0;
}
此时基类A中加virtual关键字的函数称为虚函数
如果将{}改为=0则函数print称为纯虚函数,AA类称为虚基类(或抽象类)【不可以直接定义对象】
当基类中有纯虚函数时如果继承的子类没有将纯虚函数实现,那么子类也将变为抽象类。
[](()3.具体实例
战争游戏,传进去的参数没变,仅仅改变了一下基类指针的指向
就产生了不同的效果。这个案例使用zhanzheng函数作为中央大舞台
基类指针指向友军或me实现多态,同一段代码不同的人对敌人发动进攻。
//实现多态的案例;
#include
using namespace std;
class OUr {
public:
int a=15;
virtual int get() {//进行虚函数处理;仅仅将这一个函数进行了虚函数处理;
return a;//其他没有进行虚处理的函数还会有老的问题
}
void print() {
cout << “我是父亲” << endl;
}
};
class him :public OUr{
public:
int h=25;
int get() {
return h;
}
void print() {
cout << “我是 Tom” << endl;
}
};
class me :public OUr {
public:
int m=30;
int get() {
return m;
}
void print() {
cout << “我是 zsc” << end