1.深入理解多态:
多态性可以理解为“一个接口,多种形态”,它是面向对象思想的核心(polymorphism),C++的多态性是通过虚函数来实现的,虚函数是用Virtual关键字来修饰的,基类的虚函数在派生类中可以通过重写虚函数来实现对基类的覆盖,又叫函数隐藏,派生类中重写了虚函数才是多态性的充分体现。
2.多态的用法:
开发中用的最多的就是声明基类的指针,利用该指针指向子类中的对象,调用相应的虚函数,可以根据指向不同的子类,来实现不同的方法的调用。假如没有虚函数,利用基类的指针调用相应的函数的时候,总是被限制在基类的本身,无法调用子类中被重写的函数,没有了多态性,函数的地址将会变成固定的,固定的地址始终调用到同一个函数,这样就无法实现一个借口,多种方法的目的了!
3.多态的作用
多态的主要目的就是实现接口的重用,不论传递过来的是那个类的对象,函数都能通过同一个接口来调用到适应各自对象的方法。
伪代码如下:
class Base
{
public:
virtual void fuu()
{
cout<<"Base"<<endl;
}
};
class Derived:public Base
{
public:
void fuu()
{
cour<<"Derived"<<endl;
}
};
int main()
{
Base *p=new Derived();
p->fuu();
return 0;
}
打印结果:
Derived
结论:此处重写虚函数来体现C++的多态性,基类的指针P指向派生类的对象时,实际调用了基类中被重写的fuu()函数。
喜欢的请给小编点赞和关注,您的认可是小编前进的动力!
//Base.h
class Base
{
public:
void show1();
virtual void show2();
};
//Base.cpp
void Base::show1()
{
...........
}
void Base::show2()
{
.......
}
//chlid.h
class Child:public Base
{
public:
char x;
void show1();
virtual void show2();
};
int main()
{
Child child;
Base *p_base=&child;
p_base->show1(); //Base
p_base->show2(); //child
Base &r_base=child;
r_base.show1(); //Base 普通函数看指针是由哪个类创建的就调用哪个类的普通函数
r_base.show2(); //child 虚函数看指针指向的是哪个类就调用哪个类里面的虚函数
}
注明:使用对象的指针访问普通函数时,只看指针所属类,也就是说看指针是由哪个类创建的,访问到的函数是指针所属类中的函数。
使用对象的指针访问虚函数时,只看指针指向的对象所属类,也就是说指针指向的哪个类,访问到的函数是指针指向的对象所属类的虚函数。
3.动态编译: