类成员函数的重载、覆盖和隐藏的区别是什么?

作者&投稿:前峡 (若有异议请与网页底部的电邮联系)
~ 【答案】:成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)


C++中成员函数重载是什么意思?
其实要编写一个重载函数并不是很麻烦。首先,我们要告诉电脑,同一个函数名存在了多种定义,所以,我们要给同一个函数名写上多种函数原型(如程序6.3的第二到第四行);其次,我们要对应这些函数原型,分别写上这些函数的定义(如程序6.3的主函数体之后,对三个abs函数的定义)。然而电脑又是如何...

C++ 覆盖与重写是不是一回事
不过按照C++的设计思想来说呢,基类中的非virtual类型的成员函数,是不需要在子类中进行修改的,所以如果在子类中出现了这种隐藏的情况,说明应该将基类中的该函数改成virtual类型的,然后就是override了。overload(重载)则是指在相同作用域中,多个函数具有相同的名字,但参数的数目和类型各不相同(当然...

什么是C++重载?
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题,不能只有函数...

C++ 中如何重载运算符"="用于复数的赋值。
=重载时必须作为成员函数,因此应该比正常使用函数时少一个参数。而且复数赋值后的返回值应该也是一个复数类对象,所以应改为:Point &operator =(const Point & b) { ... \/\/把实部和虚部分别赋值 return *this ; } 返回类型用引用是为了提高效率 ...

C++ 派生类对基类成员的重定义和名字隐藏 是怎么回事啊?
看《C++对象模型》 里面有CPP的实现细节

急!!请问高手们!!构造函数和函数的重载,符号重载怎样体现有用到多态性...
函数重载是名字相同但是参数(即参数个数,参数类型)不同;类的非私有成员函数可以重载。一个函数实现重载的方法可以如下:void add(int a,int b,int c){} void add(int a,int b){} char add(char a,char b,char c){} 类似于以上的办法才行 参考资料:http:\/\/zhidao.baidu.com\/question\/...

c++\/\/重载+、-、++为类的成员函数,进行复数运算 为什么假如取负函数...
Complex Complex::operator + (Complex B)原因:执行A = B + C后B和C的值应该保持不变。2.Complex& Complex::operator ++ () \/\/ { return Complex(++real,image);\/\/无不确定double类型的数据可以支持++或--操作。} 3.一元的 - 操作符重载应该这样写:Complex& Complex::operator - ...

C++函数重载的编译后的一个奇怪的问题
下面举两个例子,假如有以下函数声明: int Function1 (char *var1,unsigned long); 其函数修饰名为“?Function1@@YGHPADK@Z”,而对于函数声明: void Function2(); 其函数修饰名则为“?Function2@@YGXXZ” 。 对于C++的类成员函数(其调用方式是thiscall),函数的名字修饰与非成员的C++函数...

用友元函数重载复数乘法
友元函数就多个参数就是的了。注意y不是指针,和x一样是引用,不能用->。friend complex operator * (complex &x, complex& y){ return complex((y.re * x.re - y.im x.im), (y.re * x.im + y.im * x.re));}

在C++的一个程序内可以定义多个同名的函数,称为什么的呢?
同名函数最基本的有两种情况:1.函数重载,如 void Fuc(int a);和void Fuc(int a , int b);就可以同时存在 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一...

江油市15788379693: 类成员函数的重载,覆盖和隐藏的区别 -
权艳噻吗: 成员函数被重载的特征 (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无. 覆盖是指派生类函数覆盖 基类函数,特征是 (1)不同的范围( 分别位于派生类与基类); (2)函数名字相同; (3)...

江油市15788379693: C++里面,隐藏、覆盖 两者有什么区别 -
权艳噻吗: 成员函数的重载,覆盖(改写)和隐藏 成员函数被重载的特征是:1、具有相同的作用域,即在同一个类申明中.2、返回值相同,函数的参数不同.3、同名const方法和非const方法之间的重载不受到2的约束,同类重载受到2的约束.4、不需...

江油市15788379693: C++重载,隐藏,覆盖的区别 -
权艳噻吗: 其实你说的基类指针和派生类指针的问题,本质是virtual的影响.对于标识为virtual的函数,其函数列表会被派生类更新,所以不管使用哪种调用方式都会是子类的方法.对于非virtual的函数,其函数列表不会被更新,仅仅是添加了新的函数.在子类调用时,由于后添加的将原来的隐藏了,所以是调用子类的方法;而如果使用父类指针调用,由于在父类的函数列表中是没有子类的函数的,所以就变成了父类的函数.至于重载,它是指相同的方法名称却有不同的调用参数(据说有的语言可以支持返回类型的重载).

江油市15788379693: 面向对象的重载,覆盖和隐藏的区别 -
权艳噻吗: 方法的重载指 的是,同一个方法名,根据传入参数的不同,调用不同的方法,比如 f(int a),f(int a,int b),f(String a),这样都构成重载;方法的覆盖,即方法的重写,即子类重写父类的方法,这样在调用方法的时候就是调用的子类的方法;隐藏?不晓得你这隐藏是啥意思,要说方法的重写也是能隐藏掉父类的方法

江油市15788379693: c++重载,覆盖,隐藏的区别和执行方式 -
权艳噻吗: 1、重载 前提是在同一个类中 函数名相同 参数不同 virtual 关键字可有可无 跟返回值无关2、覆盖(override) 前提是在父类与派生类之间 函数名字相同 参数相同 父类函数需要有virtual关键字3、隐藏(hide) 如果派生类的函数与父类函数名称相同,但是参数不同,此时不管有没有virtual关键字,父类的函数被隐藏;如果派生类的函数与父类函数名称相同,参数相同,但没有virtual关键字,父类的函数被隐藏;如何执行?重载:看参数 覆盖:调用派生类函数 隐藏:指针所指对象是什么就调用什么

江油市15788379693: 函数重载和函数覆盖的区别 -
权艳噻吗: “overload”翻译过来就是:超载,过载,重载,超出标准负荷;“override”翻译过来是:重置,覆盖,使原来的失去效果.先来说说重载的含义,在日常生活中我们经常要清洗一些东西,比如洗车、洗衣服.尽管我们说话的时候并没有明确...

江油市15788379693: 重写,覆盖,重载,隐藏,多态几个概念的区别分析 -
权艳噻吗: override->重写(=覆盖)、overload->重载、polymorphism -> 多态override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法.重写(覆盖)的规则:1、重写方法的参数列表必...

江油市15788379693: 派生类的继承方式 -
权艳噻吗: public基类的public和protected的成员被派生类继承后,保持原来的状态private基类的public和protected的成员被派生类继承后,变成派生类的private成员protected基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:...

江油市15788379693: 试分析函数的重载、函数的覆盖继承和虚函数三者之间的区别 -
权艳噻吗: 简单地说函数的重载只会发生在一个类中覆盖 1.基函数必须是虚函数 2.发生覆盖的两个函数要分别位于派生类与基类中 3.函数名称与参数列表必须完全相同 由于C++的多态性是通过虚函数来实现的,所以函数的覆盖总是和多态关联在一起C++多态性体现在虚函数中也就是说编译时无法确定类型,而在运行时根据实际的类型对象调用相应的函数还有派生类的函数与基类的函数完全相同,只是基类的函数没有使用virtual关键字,此时基类的函数将被隐藏,而不是覆盖 派生类的函数与基类的函数同名,但参数列表不同,在这种情况下,不管基类的函数声明是否有virtual关键字,基类的函数都将被隐藏,注意这种情况与函数重载的区别

江油市15788379693: java的重载和覆盖有什么区别? -
权艳噻吗: 重载:就是方法名相同,其他的(返回类型,参数个数,参数类型)不完全相同.在一个类的内部,如果有一个方法名为test,重新写一个方法,这个方法的名字也叫test,但是两个方法的参数不同.也就是说,重载指的是在一个类的内部有两个或多个名字相同但参数不同的方法. 覆盖:就是将该方法的方法体改写,方法名,返回类型,参数个数,参数类型都不变.如果一个父类有一个方法名为test,在他的子类里也写一个方法名字也是test,两个方法返回类型和参数都相同,但是方法体不同.也就是说,覆盖指的是不同的类中(父类方法,子类覆盖)有两个或多个返回类型,方法名,参数都相同,但是方法体不同的方法.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网