C++ 重载 重写 隐藏

一 重载

条件:

1、作用域相同

2、函数名相同

3、参数不同(个数不同、类型不同、顺序不同均可)

举例:

class demo
{
    void fun(int a);
    void fun(int a, int b); // 参数个数不同,重载
    void fun(char *a); // 参数类型不同,重载
    int fun(int a); // 仅返回值不同,非重载
    int fun(int a, char *s); // 返回值不同,参数个数不同,重载
    // 即返回值是否相同均可,不是决定因素

    // 特别的
    void fun(int a) const; // const修饰的常量成员函数构成重载


    // const 修饰参数
    void func(int a);
    void func(const int a);  // 非重载

    void func1(int* a);
    void func1(const int* a); // 重载

    void func2(int* a);
    void func2(int* const a); // 非重载

   // output:
   // 'void demo::func(int)': member function already defined or declared	
   // 'void demo::func2(int *)': member function already defined or declared

};

二 重写

也叫做覆盖。

条件:
1、作用域不同(分别在父类和子类中)

2、函数名、参数列表、返回值均要相同

3、必须是虚函数(virtual)

4、访问修饰符可以不同

举例:

class base
{
public:
    virtual void fun();
};

class derived : public base
{
public:
    void fun(); // 重写  (virtual可以忽略不写)
};

三 隐藏

跟重写的区别是函数不为虚函数,则子类函数会隐藏父类函数,子类中要调用父类函数,需要加父类作用域。

举例:

class base
{
public:
    void func();
};

class derived : public base
{
public:
    void func(); // 隐藏base的func函数
};

四 总结

1、重载和重写最明显的区别是作用域,函数重载作用域相同,函数重写作用域不同。

2、重写和隐藏最明显的区别是是否为虚函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值