C++ 派生类对基类成员的重定义和名字隐藏 是怎么回事啊?

如题所述

看《C++对象模型》 里面有CPP的实现细节
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-26
在C++中,有以下几个概念:
重定义(redefine):派生类对基类的成员函数重新定义(即派生类定义了某个函数)该函数的名字与基类中的函数名字一样。
重载(overload):函数名字相同,但它的形参个数或者顺序(或者类型不同)注意不能靠返回类型来判断。
重写(override):派生类重定义基类的虚函数(即会覆盖基类的虚函数)。

隐藏基类成员函数的情况:如果在派生类中定义了一个与基类同名的函数,不管这个函数的参数列表是不是与基类中的函数相同,则这个同名的函数就会把基类中的所有这个同名的函数的所有重载版本都隐藏了,这时并不是在派生类中重载基类的同名成员函数,而是隐藏。比如你的基类中有一个成员函数:void func(int i);
而子类中又定义了一个void func();
那么此时,基类中的void func(int i)就被自动隐藏了,子类对象不能直接调用它。

参考资料:http://wenku.baidu.com/view/18b50f64caaedd3383c4d33f.html

本回答被提问者采纳

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

派生类是否继承基类的虚函数?
这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类...

C++面试题汇总
重定义\/隐藏:重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下: a 如果派生类的函数和基类的 函数同名,但是参数不同 ,此时,不管有无virtual,基类的函数被隐藏。 b 如果派生类的函数与基类 的函数同名,并且参数也相同 ,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。 ①: 隐藏 实现 细节...

深入理解C++中public、protected及private用法
首先,理解封装是关键。public和private的作用是实现封装,public成员允许类外访问,而private成员只能被类内访问。private成员仅限于类成员和友元访问。其次,继承是C++中另一个重要概念,protected成员可以被派生类访问,但不能被类外访问。这意味着protected成员在继承时不会受到访问范围的影响,能够保持其在...

在公有继承的情况下,基类成员在派生类中的访问权限保持不变? c++
C++在公有继承的情况下,基类的public和protected成员的访问属性在派生类中不变,而基类的private成员不可访问。其他外部使用者只能通过派生类的对象访问继承的public成员。另外,追加点分再采纳吧,亲。。

C++中基类成员在派生类中的访问属性由什么和什么共同影响??
一是基类中的访问级别,必须是public或protected级别才可以被派生类访问到 二是继承类型,比如private继承会使派生类中从基类继承过来的public或protected成员全部变为private成员,无法在派生类外部访问到,protected继承会使派生类中从基类继承过来的public成员全部变为protected成员,同样无法在派生类外部访问到...

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

C++ 类的各种公开、私有、保护成员定义的实际意义?
3、保护成员,C++一个很重要的特性是实现继承,也叫做派生,派生一词最早出现于亚理士多德的《工具论》,中国古代的诸子百家中有一家叫做名家,著名的白马非马的故事就是出自于此,派生的概念类似于马和白马的关系。用数学集合的观点来看,马是一个集合,白马是马的子集,派生实际上实现的就是这种子集...

C++11 之 override
如果在派生类中重新定义了继承自基类的成员函数ObjectID呢?此时,派生类中重新定义的成员函数会“隐藏”(hide)继承自基类的成员函数。这是因为非虚函数是“静态绑定”的,pB被声明的是Shape*类型的指针,则通过pB调用的非虚函数都是基类中的,即使pB指向的是派生类。与“静态绑定”相对的是虚函数的“...

派生类的对象对基类中的什么成员是可以访问的?
C++中派生类对基类成员的三种访问规则:1、私有继承的访问规则 当类的继承方式为私有继承时,基类的public成员和protected成员被继承后成为派生类的private成员,派生类的其它成员可以直接访问它们,但是在类的外部通过派生类的对象无法访问。基类的private成员在私有派生类中是不可直接访问的,所以无论是派生...

相似回答