![更多课程](/zhuzhan/img/btn-course.png)
![选择中心](/zhuzhan/img/btn-center.png)
![logo](/zhuzhan/img/logo.png)
C/C++培训
达内IT学院
400-111-8989
![](/zhuzhan/images/weixin.jpg)
多态是在不同继承关系的类对象,去调同一函数,产生了不同的行为。就是说,有一对继承关系的两个类,这两个类里面都有一个函数且名字、参数、返回值均相同,然后我们通过调用函数来实现不同类对象完成不同的事件。
构成多态还有两个条件:
①调用函数的对象必须是指针或者引用。
②被调用的函数必须是虚函数,且完成了虚函数的重写。
说了C++中多态的定义下面用一句代码来了解一下多态的作用:
#include<iostream>
using namespace std;
class Shape
{
private:
int n;
public:
Shape():n(5){}
~Shape(){}
virtual void Draw() { cout << "画一个图形" << endl; }
virtual void Area() { cout << "计算图形面积" << endl; }
virtual void Erase() { cout << "将图形清除" << endl; }
void Size() { Area(); }
};
class Cube:public Shape
{
private:
int e;
public:
Cube() :e(2) {}
~Cube() {}
virtual void Draw() { cout << "画一个立方体" << endl; }
virtual void Area() { cout << "计算立方体面积" << endl; }
virtual void Erase() { cout << "清除立方体" << endl; }
};
void Update(Shape &S)
{
S.Draw();
}
int main(void)
{
Shape *pS;
Cube C;
pS = &C;
cout << "执行Update函数後:";
Update(C);//引用方式调用
cout << "执行Size函数後:";
pS->Size();//间接调用
cout << "执行Erase函数後:";
pS->Erase();//指针调用
system("pause");
return 0;
}
输出:
执行Update函数後:画一个立方体
执行Size函数後:计算立方体面积
执行Erase函数後:清除立方体
得到结果之后,给大家几句话:
多态时,父类先于子类构造,晚于子类析构。
父类通过虚函数才能调用子类函数。
子类析构函数结束时会调用父类的析构函数,这是编译器为你自动实现的。
如果想要被人继承,即类中有虚函数,那析构就应该是虚的;若析构非虚,就不应该继承这个类。不然子类析构无法被父类指针调用而导致内存泄漏。
免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!