//多态的案例,多态的意义,多态成立的三个条件。
#include<iostream>
using namespace std;
class A
{
public:
virtual int power()
{
return 10;
}
} ;
class B
{
public:
int power()
{
return 15;
}
};
class C:public A
{
public:
virtual int power()
{
return 20;
}
};
class D:public A
{
public:
virtual int power()
{
return 30;
}
}
/*多态威力
1 playobj给对象搭建舞台,看成一个框架,我可以吧这个框架写在另外一个cpp文件中,或者吧这个框架单独封装成一个动态库,
让别人去调用,在这个动态库里面, 别人给你传入什么参数,你就执行什么参数 */
void playobj(A *a1,B *b1)
{
if(a1->power()> b1->power() )//因为使用了virtual关键字,使用a1->power()函数时候,
//传入的是父类对象,那么就是调用父类对象的数据,如果传入的是子类对象,anemia就会调用子类对象的数据
{
cout<<"第一个大"<<endl;
}
else
{
cout<<"第二个大"<<endl;
}
}
int main()
{
A a1;
B b1;
C c1;
D d1;
playobj(&a1,&b1);
playobj(&c1,&b1);
playobj(&d1,&b1); //利用多态,之后我们就可以随便调用这个函数,传入什么他就执行什么。
//这个框架,能把我们后来人写的代码,给调用起来。
}
/*多态思想
1:封装:突破C函数的概念,用类做函数参数的时候,可以使用对象的属性和对象的方法
2:继承:A B代码复用
3:多态:可以使用未来。。。*/
/*
多态很重要
C语言 间接赋值是指针存在的最大意义,是C语言特有的现象。
(1:定义两个变量 2:建立关联 3:*p在被调用函数中去简介的修改实参的值 )
实现多态的三个条件
1:要有继承
2:要有虚函数重写
3:用父类指针指向子类对象,或者用父类引用指向子类对象 。 */