第六节,多重继承及虚函数

来源:互联网 发布:淘宝上买车险怎么理赔 编辑:程序博客网 时间:2024/06/08 05:59

1,多重继承

我接触的语言中,能支持多重继承的也就C++了,下面看看他到底怎么个多继承法。

入正题,看代码:

#include <iostream>class Peolpe{public:    int age;    void setAge(int aAge)    {        age = aAge;    };    void printf()    {        std::cout<<"输出age:"<<age;    }};class Man{    int age1;public:    void setAge(int aAge)    {        age1 = aAge;    }};class Woman:public Peolpe,public Man{public:};int main(int argc, const char * argv[]){    Woman w;    w.Man::setAge(55);    w.printf();        return 0;}

从上面看到,我定义了三个类,其中前两个类People,Man是基类,我把Woman当做子类,Woman继承于People,Man.

多重继承需要注意的点:

(1),多重继承的父类用“,”隔开

(2),当两个父类具有相同的成员函数,例如上例子中得setAge,则在调用该成员函数的时候需要标明类名,例如:

w.Man::setAge(55);当然了,也可以不那么做这就需要用到关键字Virtul,个人不太喜欢这个关键字,如果需要自己研究的可以百度下看看,用了这个关键字修饰继承的类之后,再调用同名成员函数的时候就不需要再去标明来自哪一个类了。(3),这个需要注意:默认情况下,子类继承父类的默认构造函数,即使不带任何参数的构造函数,子类也继承默认的析构函数。

2,虚函数

上代码:

#include <iostream>class Father{public:  virtual void jump()    {        std::cout<<"父亲跳十万米\n";    };    void run()    {        std::cout<<"父亲跑步\n";    };};class Son:public Father{public:    void jump()    {        std::cout<<"儿子跳十万米\n";    };    void run()    {        std::cout<<"儿子跑步\n";    };};int main(int argc, const char * argv[]){    Father * father = new Son;    father->jump();    father->run();    return 0;}

输出:

儿子跳十万米
父亲跑步


通过输出结果,我们可能会感到诧异,然后就该去代码中看两个方法有什么不同。

然后会发现,不同点就是在于关键字:virtual

用virtual修饰的函数,我们称之为虚函数。用virtual修饰表示该函数有多种形态即该函数可能被多个对象所拥有,并且功能都不一样。

系统在执行到有virtual修饰的成员函数的时候,会判断是哪一个函数调用了他,然后去调用该函数的同名函数。


原创粉丝点击