C++ override overload 的区别

本文详细介绍了C++中的override(重写)与overload(重载)的区别,包括它们的作用域、函数原型特点及如何实现多态。通过实例说明了如何在类的继承中正确使用virtual关键字。
 
       override是指在不同作用域中,多个函数原型完全一样,而实现却不同的函数。在C++中,经常发生在类的继承中。当基类中的某个方法是virtual或pure virtual函数时(当然访问权限必须是public或protected,因为从C++设计思想上来讲private的函数不会是virtual的,呵呵),其子类中对该方法的重新实现就属于override。使用时,可以通过基类的指针或者引用所指向的具体对象来确定调用的是哪个方法,从而实现函数的多态。对于基类中的非virtual类型的成员函数,若其子类中也声明了与该函数名称相同的函数,那么基类中的该函数(也许是一系列函数,如果该函数在基类中有重载的话,呵呵)将被隐藏,可以通过域解析操作符来调用。不过按照C++的设计思想来说呢,基类中的非virtual类型的成员函数,是不需要在子类中进行修改的,所以如果在子类中出现了这种隐藏的情况,说明应该将基类中的该函数改成virtual类型的,然后就是override了,哈哈!
        而overload则是指在相同作用域中,多个函数具有相同的名字,但参数的数目和类型各不相同(当然相同数目和类型,如果顺序不同也是可以的,哈哈),因为函数重载的机制是在C++中函数的签名与其参数有关,而不像C中,只与函数名有关。
         总之,override与overload的一个最大的区别就是作用域不同,以及函数原型是否相同,呵呵。如果使用关键字来总结的话,就是,override:作用域不同,继承,重写,virtual,多态,基类指针/引用来访问;overload:作用域相同,重载。
C++中,我们可以使用关键字来隐藏、覆盖重载成员函数。 1. 隐藏(Hide):当派生类中定义了与基类中同名的成员函数时,基类的成员函数将被隐藏。可以使用作用域解析运算符(::)来访问被隐藏的基类成员函数。 ```cpp class Base { public: void foo() { cout << "Base::foo()" << endl; } }; class Derived : public Base { public: void foo() { cout << "Derived::foo()" << endl; } }; int main() { Derived d; d.foo(); // 输出 Derived::foo() d.Base::foo(); // 输出 Base::foo() return 0; } ``` 2. 覆盖(Override):当派生类中定义了与基类中同名、同参数列表的成员函数时,称为覆盖。在派生类对象上调用该函数时,将执行派生类的实现而不是基类的实现。 ```cpp class Base { public: virtual void foo() { cout << "Base::foo()" << endl; } }; class Derived : public Base { public: void foo() override { // 使用 override 关键字显式声明覆盖 cout << "Derived::foo()" << endl; } }; int main() { Derived d; Base* b = &d; b->foo(); // 输出 Derived::foo() return 0; } ``` 3. 重载(Overload):在同一个作用域内,可以定义多个同名函数但参数列表不同,称为重载。编译器根据函数调用时所传递的参数类型数量来决定调用哪个函数。 ```cpp class MyClass { public: void foo(int x) { cout << "foo(int): " << x << endl; } void foo(double x) { cout << "foo(double): " << x << endl; } }; int main() { MyClass obj; obj.foo(10); // 输出 foo(int): 10 obj.foo(3.14); // 输出 foo(double): 3.14 return 0; } ``` 希望以上解释能够帮助到你!如果你有更多的问题,请继续提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值