C++中重载,重写,重定义

重载:

同名的函数在同一个作用域中,且函数参数列表类型必须不同( 参数个数 或 类型 或 顺序必须不同),且与返回值无关。

例如:

void test(){
    cout << "我是返回void的函数" << endl;
}

int test(int a, int b){
    cout << "我是返回int的函数" << endl;
    return a + b;
}

double test(double a){
    cout << "我是返回double的函数" << endl;
    return a;
}

重写:

两个函数必须分别在基类与派生类的作用域中;且函数名/参数/返回值也相同(协变除外);两个函数必须是虚函数。

例如:

class Car{
public:
    virtual  ~Car(){
        cout << "~Car()" << endl;
    }

    virtual void test(){
        cout << "Car::test()" << endl;
    }
};

class Banze : public Car{
public:
    virtual ~Banze(){
        cout << "~Banze()" << endl;
    }

    virtual void test(){
        cout << "Banze::test()" << endl;
    }
};

特别说明的是,其实析构函数在底层都被转换为了同名的函数,所以析构函数也是可以构成重写的。

重定义:

两个函数必须分别在基类与派生类的作用域中;函数名相同;如果基类中同名函数与派生类中的同名函数不构成重写,就是重定义。

例如:

class Car{
public:
    void test(){
        cout << "Car::test()" << endl;
    }
};

class Banze : public Car{
public:
    void test(int a, int b){
        cout << "Banze::test()" << endl;
    }
};

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 3. 类设计者工具 3.1 拷贝控制 五种函数拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数拷贝和移...
    王侦阅读 5,933评论 0 1
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 8,020评论 0 3
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 10,446评论 0 14
  • 几种语言的特性 汇编程序:将汇编语言源程序翻译成目标程序编译程序:将高级语言源程序翻译成目标程序解释程序:将高级语...
    囊萤映雪的萤阅读 8,046评论 1 5
  • 对面的男孩直挺挺的坐着,看得出来有些腼腆。略微有些黑黑清秀的脸庞,眉宇之间有一种让小莫很熟悉的感觉,很熟悉...
    谷土阅读 1,013评论 1 0

友情链接更多精彩内容