C++的继承,多态和组合

来源:互联网 发布:知福茶叶怎么样 编辑:程序博客网 时间:2024/06/05 16:50

首先,继承是子类继承父类的关系;组合是类与类的包含关系;多态是是“一个接口,多种方法”,程序在运行时才决定调用的函数,这里,子类可以修改继承来的父类中的函数(通过虚函数的方式),覆盖掉原来的继承过来的函数。

举个例子,父亲是父类,有吃饭睡觉等等功能,当儿子继承父亲这个类的时候,吃饭,睡觉这些函数直接继承过来就好了,因为都一样,没必要再定义一遍。其中,父类的一个函数为爱好,父亲的爱好是运动,而儿子的爱好是打游戏,那么,这个函数就不适用于儿子了,将父亲的爱好函数habit()定义为虚函数virtual habit(),这样,在子类中就可以重新定义这个函数了。

举个例子:

#include<iostream>using namespace std;class father{public:class birth{public:int year;int month;void printbirth(){printf("birth\n");}};void eat(){printf("eat\n");}virtual void habit(){printf("sport\n");}birth mybirth;};class son : public father{public:void foo(){printf("3\n");}void habit(){printf("games\n");}};int main(void){father a;son b;father *p = &a;p->eat();p->habit();p->mybirth.printbirth();p = &b;p->eat();p->habit();return 0;}

父类指针p动态调用了habit()函数。


存放虚函数指针的地方是虚表,对于一般继承和多重继承的情况派生类是怎么覆盖掉父类中虚函数的,看这篇文章,我觉得写的很清楚。http://blog.csdn.net/wswifth/article/details/5741687

0 0
原创粉丝点击