首页 > 其他分享 >重载,重写,傻傻分不清楚

重载,重写,傻傻分不清楚

时间:2023-04-27 10:13:29浏览次数:27  
标签:调用 函数 傻傻 分不清楚 基类 重载 重写 display

在C++中,重载(Overloading)和重写(Overriding)是两个不同的概念,它们涉及到函数或方法的使用和定义。下面分别介绍它们:

重载(Overloading)

重载是指在同一作用域内,允许有多个同名函数,这些函数的参数列表不同(参数的个数或类型不同)。编译器会根据调用时传递的参数来选择正确的函数版本。重载适用于普通函数和类成员函数。

示例:

#include <iostream>

void display(int num) {
    std::cout << "Displaying an integer: " << num << std::endl;
}

void display(double num) {
    std::cout << "Displaying a double: " << num << std::endl;
}

int main() {
    int intValue = 42;
    double doubleValue = 42.5;

    display(intValue);      // 调用 display(int)
    display(doubleValue);   // 调用 display(double)

    return 0;
}

重写(Overriding)

重写是指派生类中重新定义基类中的虚函数(virtual function),以实现多态(Polymorphism)。派生类中的函数签名必须与基类中的虚函数完全相同(返回类型、函数名和参数列表)。当通过基类指针或引用调用该函数时,将根据对象的实际类型动态地调用相应的版本。

示例:

#include <iostream>

class Base {
public:
    virtual void display() {
        std::cout << "Displaying base class." << std::endl;
    }
};

class Derived : public Base {
public:
    // 重写基类的虚函数
    void display() override {
        std::cout << "Displaying derived class." << std::endl;
    }
};

int main() {
    Base* basePtr = new Base();
    Base* derivedPtr = new Derived();

    basePtr->display();     // 调用 Base::display()
    derivedPtr->display();  // 调用 Derived::display()

    delete basePtr;
    delete derivedPtr;

    return 0;
}

总结一下:

  • 重载是在同一作用域内定义多个同名函数,但参数列表不同。
  • 重写是派生类重新定义基类中的虚函数,实现多态。

标签:调用,函数,傻傻,分不清楚,基类,重载,重写,display
From: https://www.cnblogs.com/zhao-jie-li/p/17358136.html

相关文章

  • 重载
           在同一个类中,如果多个方法有相同的名字、不同的参数,即称为重载,比如一个类中有多个构造方法。String类中的valueOf也是比较著名的案例,它有9个方法,可以将输入的基本数据类型、数组、Object等转化成为字符串。在编译器的眼里,方法名称+参数类型+参数个数,组成一个唯一键,......
  • Python类变量和实例变量,傻傻分不清楚
    今日鸡汤坐看云卷云舒,静听花开花落。大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群有个叫【Chloé】的粉丝问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习。这个粉丝在法国留学,所以提问是英文的,当然了英文看上去也不难,有点二级英文基......
  • 函数重载
    函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。#include<iostream>usingnamespacestd;voidprint(i......
  • 7、带输入的复数类-加-减-乘运算符重载
    如题,要求实现:1、复数类含两个参数的构造函数,一个为实部,一个为虚部。2、实现-加-减-乘运算符重载运算符重载功能,并实现返回值为复数类。3、Show出结果。例如输入78输出:(10+12i)(-4-4i)(-11+52i)#include<iostream>usingnamespacestd;classCmycomplex{private:......
  • 6、带输入的复数类加法运算符重载
    如题,要求实现:1、复数类含两个参数的构造函数,一个为实部,一个为虚部。2、实现加法运算符重载功能,并实现返回值为复数类。3、Show出结果。#include<iostream>usingnamespacestd;classCmycomplex{private:doublereal,imag;public:Cmycomplex(doubler=0,doubl......
  • 5、复数类加法运算符重载
    如题,要求实现:1、复数类含两个参数的构造函数,一个为实部,一个为虚部。2、实现加法运算符重载功能,并实现返回值为复数类。3、Show出结果。#include<iostream>usingnamespacestd;classCmycomplex{private:intreal,imag;public:Cmycomplex(intr=0,inti=0);//......
  • 运算符重载"+""-""*"“<<”">>"
    一、问题描述。设计一个描述三维坐标的向量类vector3D,成员如下:数据成员:三个坐标x,y,z,float类型,私有访问属性公有函数成员:三个参数均有默认值的构造函数,默认值为0,0,0;重载输入输出运算符,输出格式为(x, y, z);重载加法+、减法-、数乘*(乘数在前,乘数为float类型)这三个运算符;在主函数中定......
  • C#基础 ref out 函数参数 不算重载的简单示例
     .NETFramework:4.7.2       IDE:VisualStudioCommunity2019        OS:Windows10x64    typesetting:Markdown codeusingSystem;namespaceConsoleApp{classProgram{staticvoidMain(string[]args){......
  • 打卡 复数的加减运算(运算符重载)
    ###复数加减(运算符重载)声明一个复数类CComplex(类私有数据成员为double型的real和image)定义构造函数,用于指定复数的实部与虚部。重载<<运算符,以格式real+imagei的格式输出当前对象(当虚部为非负数时,实部虚部中间用+号连接,当虚部为负数时,实部虚部用-号连接:如3+4i,3-4i,3+0i)。重载......
  • 关于Java中方法重载和方法重写
    方法重写是子类继承父类(默认继承Object类)后覆盖父类的方法需要保证同名同参同返回值且访问权限范围不能缩小(public>protected>default>private)publicclassFather{ publicintmethod(){ return-1; }}classSonextendsFather{ //访问范围不能小返回值方法......