关于重载,覆盖/隐藏,虚函数,纯虚函数,多重继承
来源:互联网 发布:新网域名备案 编辑:程序博客网 时间:2024/06/08 17:46
这些概念放在类里面进行解释
函数重载:指的是一个函数在一个类里面有多种实现方法,只是这些方法使用的参数个数或者参数类型不同,当调用这个函数时,程序会根据传进来的参数个数和类型自动去调用匹配的那个。
函数覆盖:指的是子类中重新定义了一个父类中拥有的函数,重新定义的这个函数只要与父类的函数名一样(参数一样与否不影响)就构成对父类这个函数的覆盖/隐藏。同时,如果父类中如果重载了这个函数,这时候,与子类参数类型也完全一致的函数被覆盖,剩下的这几个重载函数就会被隐藏。当用子类的对象去调用这个函数时,就会调用子类的函数。如果想去调用父类被隐藏的函数,需要加上路径,就是在函数名前加上父类名和::,这样就可以了。同样如果想去访问被覆盖的函数加上路径名就可以了。
虚函数:就是在一个函数声明前加上virtual ,这样当该函数有子类时,如果在该子类中也实现了该虚函数,当用子类的对象调用这个函数时,可以理解为函数覆盖,其执行子类的函数。当把子类的指针赋值给父类指针对象时,当用这个父类指针调用虚函数时,他首先会看子类中是否有与这个函数类型完全一样的类型(包括函数名,参数类型和个数)
如果有就调用子类的,如果没有依然调用父类的
纯虚函数:纯虚函数和虚函数的区别是纯虚函数只进行声明,不在父类中实现,其声明的形式是在虚函数声明形式的基础上加上=0,拥有纯虚函数的类称为纯虚类,这样的类不能声明对象,但可以声明指针类型的变量。而其子类必须实现纯虚类的所有纯虚函数。
多重继承:多重继承继承方式和单一继承差不多,只要把所继承的所有父类用逗号隔开即可。
但多重继承会产生很多问题,例如当所继承的多个父类中有相同的函数声明,当子类调用该函数时,系统就不知道该调用哪个函数,从而产生错误,一种解决的办法是对所用的函数加上路径名(类名::)。
还有一个问题是如果继承的这些父类他们自身又继承自相同的父类,当子类去调用父类的父类的方法时就会产生错误,原因是子类中有继承多个父类就拥有多个这个父类的方法,当去调用时就会产生歧义,一种解决办法是如上面加上路径名,另外一种解决办法是采用虚继承,就是这些父类虚继承这个公有的父类,这样子类中就只有一个公有父类的方法,再去调用时就不会出现歧义了。
上面是我理解的,不一定对,仅供参考!!!!!
- 关于重载,覆盖/隐藏,虚函数,纯虚函数,多重继承
- C++继承、虚函数、纯虚函数、多态、覆盖、重载、隐藏、引用等常用概念
- 虚函数与多态性,虚拟继承,纯虚函数及重载、覆盖、隐藏的区别
- 【2015.2.9】重载、覆盖、隐藏、虚函数、纯虚函数
- c++ 继承 虚函数与多态性 重载 覆盖 隐藏
- 多重继承中的纯虚函数“妙用”
- C++重载覆盖和隐藏,虚函数与纯虚函数
- C++中虚函数、纯虚函数、抽象类、重载、覆盖、隐藏的区别与联系
- 虚继承 重载 覆盖 隐藏
- C++基础 虚函数、重载、覆盖、隐藏
- 多态(2)纯虚函数与重载、重写(覆盖)、重定义(隐藏)
- C++继承:同名隐藏、覆盖,虚函数
- C++继承:同名隐藏、覆盖,虚函数
- C++继承:同名隐藏、覆盖,虚函数
- C++继承:同名隐藏、覆盖,虚函数
- c++(一) 类 对象 重载 继承 多态 构造函数 虚函数 覆盖 纯虚函数等
- 函数重载、覆盖、隐藏
- 函数重载、覆盖、隐藏
- 计算机视觉与超自然物种 by Peter Tu
- DB2视图
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue在入队操作高并发性能比较
- VC弹出"选择文件"和"选择文件夹"对话框
- 业界资讯:flash player 11 和air 3.0 beta发布
- 关于重载,覆盖/隐藏,虚函数,纯虚函数,多重继承
- 关于birt交叉报表中字符串日期排序
- Android 盘点所有Dialog 对话框 大合集 详解
- USB-KEY原理简要说明
- 关于Android的一些设计(二)
- 你每天花了多少时间与你的孩子交流!
- jdbc结果集rs null .next()
- 也谈创业
- Linux下./configure错误详解