C++的重载、覆盖、隐藏以及多态性 总结


参考博客(转)

                http://blog.chinaunix.net/uid-26611383-id-3758647.html

                http://blog.csdn.net/hackbuteer1/article/details/7475622


什么是重载? 
重载是对于一个类而言的。
在一个类中,两个成员函数的函数名相同,参数类型、个数不同,不论是否有virtual关键字。

那么什么是覆盖?
覆盖是相对两个类(父子类)而言的。
在父类与子类中,成员函数的函数名相同,参数相同,且父类中的函数有virtual关键字修饰。(多态性的基础)

那么什么是隐藏呢?
隐藏也是相对两个类(父子类)而言的。
1、在父类与子类中,成员函数的函数名相同,参数不同,不论父类中的成员函数是否有virtual关键字修饰。
2、在父类与子类中,成员函数的函数名相同,参数相同,且父类中的成员函数没有virtual关键字修饰。

什么是多态性?
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。
最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。
a、编译时多态性:通过重载函数实现 
b、运行时多态性:通过虚函数实现。 

<span style="font-size:18px;background-color: rgb(255, 255, 153);">//父类</span>
<span style="font-size:18px;background-color: rgb(255, 255, 255);">class CBase
{
public:
    CBase(){}
    ~CBase(){}
    virtual void fun1(){}
    int fun1(int){}            //此处的fun1与上行的fun1为重载关系
    virtual void fun2(){}
    void fun3(){}
    void fun4(){}
protect:
private:
};

</span>
<span style="font-size:18px;"><span style="background-color: rgb(153, 255, 255);">//子类</span><span style="background-color: rgb(255, 255, 255);">
class CDerived : public CBase
{
public:</span></span>
<span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">    using CBase::fun4;        //使得子类能够使用基类被隐藏的函数
    CDerived(){}
    ~CDerived(){}
    void fun2(){}             //此处的fun2与基类CBase中的fun2为覆盖关系
    virtual void fun3(int){}  //此处的fun3与基类CBase中的fun3为隐藏关系
    void fun4(){}             //此处的fun4与基类CBase中的fun4为隐藏关系
protect:
private:
};</span></span>
<span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">
</span></span>
<span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">CDerived d;</span></span>
<span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">d.fun3();                     //这里会报错。因为子类函数fun3将基类的函数隐藏了</span></span>
<span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">d.fun4();                     //此处成功。</span></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值