C++中区分概念重载、重写和重定义

重载:

     在同一作用域下, 函数名相同, 但是参数列表不同。

重写:

    分别在基类和派生类中(在不同作用域下), 函数名相同,参数相同, 返回类型相同, 并且基类函数必须为虚函数。

重定义:

    分别在基类和派生类中(在不同作用域下), 函数名相同,不构成重写的话则为重定义(参数列表可相同可不同)。

#include<iostream>

using namespace std;

class Base
{
public:
    virtual void print()
    {
        cout << "调用基类的print方法" << endl;
    }
    void print(int i) //函数重载:作用域相同,但参数列表不同
    {
        cout << "i: " << i << endl;
    }
};

class Derived : public Base
{
public:
    virtual void print() //不加virtual关键字的话,为重定义。加virtual关键字的话,为重写
    {
        cout << "调用派生类的print方法" << endl;
    }
    void print(int i) //对于基类中的函数,为重定义。对于派生中的print函数而言,为函数重载
    {
        cout << "i: " << i + 1 << endl;
    }
};

int main()
{
    Base b1;
    b1.print();
    b1.print(2);

    Derived d1;
    d1.print();
    //调用的派生类的print(int i)
    d1.print(3);
    //调用的基类的print(int i)
    d1.Base::print(3);

    //多态,根据指向的对象的类型进行调用
    Base *pb = &b1;
    pb->print();
    pb = &d1;
    pb->print();
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值