名字重载Name overloading

如果顶层函数有不同的签名,则函数名可以相同。
如果同一类中的函数有不同的签名,则函数名可以相同。
 
C++中允许在相同的作用域内以相同的名字定义几个不同实现的函数,可以是成员函数,也可以是非成员函数。但是,定义这种重载函数时要求函数的参数或者至少有一个类型不同,或者个数不同。而对于返回值的类型没有要求,可以相同,也可以不同。
 
class C
{
public:
C( )
{

} // default constructor
C( int x )
{

} // convert constructor
};
void print( double d );
void print( char * );
int main( )
{
C c1,c2();//编译过程中绑定函数调用和对应的函数体
print( 100.123);
print( “100.123” );
}

名字覆盖、重置 Name overriding

若基类方法 B::m 和派生类方法 D::m 具有相同的函数签名,且基类方法 B::m 是 virtual 方法,则 D::m  重置了 B::m。
当通过基类指针或引用访问被重置的方法 m 时,需要运行时动态绑定。
覆盖(override)是指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体不同,当派生类对象调用派生类中该同名函数时会自动调用派生类中的覆盖版本,而不是父类中的被覆盖函数版本,这种机制就叫做覆盖。
 
class B
{
public:
virtual void m( )
{

}
};
class D : public B
{
public:
void m ()//重置了基类方法,仍然为虚函数
{

}
};
int main( )
{
B*p= new D;
p -> m(); // 动态绑定 D::m()
return ;
}
class B
{
public:
void m( )//非虚函数,采用静态绑定
{

}
};
class D : public B
{
public:
void m ( )
{

}
};
int main( )
{
B* p=new D;
p ->m( ); //静态绑定 B::m()
return ;
}
名字覆盖、重置 Name overriding 条件
在父、子类的函数,即存在继承体系结构。
父类中标为virtual的成员函数。函数名字相同,参数相同。
通过父类的指针或是引用 指向或引用 一个对象,并调用虚函数。
 

名字隐藏  Name hiding

若基类 B 定义了非虚方法 m,同时其派生类 D 也定义了方法m,此时,我们说派生类方法 D::m 隐藏了继承自基类的同名方法 B::m 。
class B
{
public:
void m(int x)
{

}
};
class D : public B
{
public:
void m ( )//由于函数签名不同,所以二者不构成重置。
{

}
};
int main( )
{
D d1 ;
d1.m(); // invokes D::m()
d1.m(); // ERROR
d1.B::m(); // OK
return ;
}
由于函数签名不同,所以二者不构成重置。D::m隐藏了B::m
 
 
n函数同名的一般理由如下:
 
1.以Top-level函数形式定义时,形成重载,表示他们完成相同的概念操作;
2.同一个类中的非构造函数,若同名则形成重载,表示他们完成相同的概念操作;
3.一个类存在多个构造函数:default constructor, copy constructor, convert constructer, …
4.在一个类继承层次中,为支持方法多态,由基类定义虚函数,在派生类中重新定义-重置。
 

C++ 名字重载、隐藏、覆盖的更多相关文章

  1. C++中的虚继承 & 重载隐藏覆盖的讨论

    虚继承这个东西用的真不多.估计也就是面试的时候会用到吧.. 可以看这篇文章:<关于C++中的虚拟继承的一些总结> 虚拟基类是为解决多重继承而出现的. 如:类D继承自类B1.B2,而类B1. ...

  2. C++中的重载隐藏覆盖&&JAVA中的重载覆盖&&多态

    class 类继承默认是private, struct 默认继承是public C++中的隐藏: 只要派生类中出现和基类一样的函数名,基类中的函数就会被派生类中的函数给隐藏(如果派生类和基类中的函数名 ...

  3. C++类成员函数的重载、覆盖和隐藏区别?

    C++类成员函数的重载.覆盖和隐藏区别? a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.b.覆盖是指派生类函数覆 ...

  4. java的重载、覆盖和隐藏的区别

    重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg ...

  5. java中重载、覆盖和隐藏三者的区别分析

    重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg ...

  6. c++中的隐藏、重载、覆盖(重写)

    转自c++中的隐藏.重载.覆盖(重写) 1 重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual关键字可有可无. 覆盖是 ...

  7. 【转】c++重载、覆盖、隐藏——理不清的区别

    原文网址:http://blog.sina.com.cn/s/blog_492d601f0100jqqm.html 再次把林锐博士的<高质量c++编程指南>翻出来看的时候,再一次的觉得这是 ...

  8. c++重载、覆盖和隐藏

    看以前的:http://www.cnblogs.com/youxin/p/3305688.html 答案:a.成员函数被重载的特征:overload(1)相同的范围(在同一个类中):(2)函数名字相同 ...

  9. C++:类成员函数的重载、覆盖和隐藏区别?

    #include <iostream> class A { public: void func() { std::cout << "Hello" <& ...

随机推荐

  1. fiddler添加IP列

    willow一个规则管理插件 Ctrl+F查找“static function Main()”字符串,然后添加以下代码: FiddlerObject.UI.lvSessions.AddBoundCol ...

  2. python怎么连接MySQL(附源码)

    一.源码如下: import pymysql from pymysql.cursors import DictCursor # 创建数据库连接 localhost等效于127.0.0.1 conn = ...

  3. HashMap如何在Java中工作?

    通过优锐课学习笔记分享,我们可以看到HashMap问题在工作面试中很常见. 这也是HashMaps在Java内部如何工作的一些深入说明,分享给大家参考学习. HashMap在内部如何工作已成为几乎所有 ...

  4. Deepnude算法“tuo”衣服

    PS:我不是偷窥狂.我是技术的爱好者 换脸视频后AI又出偏门应用:用算法“tuo”女性衣服 据美国科技媒体Motherboard报道,一名程序员最近开发出一款名叫DeepNude的应用,只要给Deep ...

  5. Windows10 搭建Kafka集群

    下载Kafka 1.下载Kafka:http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz 2.解压后复制Kafka文件夹,分 ...

  6. Python:多态、协议和鸭子类型

    多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...

  7. IOS-dequeueReusableCellWithIdentifier的应用

    这是个uitableviewcell重用的函数.当一个列表中的布局相同只是数据不同时,我们可以重用我们的cell,不需要再重复创建.上面代码的意思是,先根据identifier去重用列表中找有没有可以 ...

  8. 剑指offer 27:二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 采用中序遍历遍历二叉树,利用二叉排序树的特性,顺次连接节点,形成 ...

  9. 微信小程序实现点击拍照长按录像功能

    微信小程序实现点击拍照长按录像功能 代码里面注释写的都很详细,直接上代码.官方的组件属性中有触摸开始和触摸结束属性.本功能依靠这些属性实现. .wxml代码: <!-- 相机 pages/cam ...

  10. IDEA org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    引用地址:https://guozh.net/idea-org-apache-ibatis-binding-bindingexception-invalid-bound-statement-not-f ...