C++ 重载、重写、重定义的区别

本文是学习重载、重写、重定义的学习笔记。
重载(overload):类中同名函数,通过参数不同,实现不同的功,返回值不同不能作为重载区别。
重写(override):子类重写父类的虚函数,父类函数必须是virtual说明的,不能是static的,是C++实现多态的方式,让父类能调用子类的方法。
重定义(redefining):子类重定义父类的同名非虚函数,参数可以同父类不同。一旦重定义,父类的同名函数将失效。

实验代码:

#include <iostream>

using namespace std;

class A
{
 public:
    virtual string fun() = 0; //纯虚函数,A是抽象类,不能实例化

};

class B : public A
{
public:
    virtual string fun() {return "Class B fun!";}  //虚函数,同时是对父类的fun的重写(override)
    virtual string fun(string ch) {return "Class B " + ch;}    //虚函数,有自己的定义,同时是对本类fun()的重载(overload)
};

class C : public B
{
public:
    string fun(){return "Class C fun!";}   //对父类的fun的重写(override)
    int fun(int i) {return i;}  //对本类fun()的重载(overload)
};

class D : public C
{
public:
    int fun(int i) {return i*2;}    //对父类fun(int)的重定义(redefining)
};
int main(int argc, char *argv[])
{
	string str = "Test String";
    A* a = new D();
    cout<<"a->fun(): "<<a->fun()<<"\n";

    B b;
    cout<<"b.fun(): "<<b.fun()<<"\n";
    cout<<"b.fun(Test String):"<<b.fun(str)<<"\n";

    C c;
    cout<<"c.fun(): "<<c.fun()<<"\n";
    cout<<"c.fun(5): "<<c.fun(5)<<"\n";

    D d;
    cout<<"d.fun(5): "<<d.fun(5)<<"\n";

    return 0;
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值