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

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修饰的成员函数的时候,会判断是哪一个函数调用了他,然后去调用该函数的同名函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值