C++重载,重写,重定义
1.重载:
重载是在一个类中,函数名一样,参数类型或参数个数不同的一系列函数
需要注意的是,与返回类型无关。
class Test
{
public:
void show();
void show(int a);
void show(double a);
void show(int a,int b);
void show(int a,double b);
};
2.重写
我们比较熟悉的另一个词是“覆盖”
用在继承中,子类若没有重新定义父类的虚方法,则子类对象调用该方法时,使用的仍是父类的方法;
否则,子类覆盖了父类的虚方法,调用时使用的是重新定义的方法。
class Test
{
public:
virtual void show()
{
std::cout<<"Test::show()"<<std::endl;
}
};
class SubTest:public Test
{
public:
virtual void show()
{
std::cout<<"SubTest::show()"<<std::endl;
}
};
int main()
{
Test *p = new SubTest;
p->show();
return ;
}
输出结果:
SubTest::show()
3.重定义
我们比较熟悉的另一个词是“隐藏”
子类重新定义父类中有相同名称的非虚函数,则对象调用该非虚方法时,使用的对象本身定义的方法。
class Test
{
public:
void show()
{
std::cout<<"Test::show()"<<std::endl;
}
};
class SubTest:public Test
{
public:
void show()
{
std::cout<<"SubTest::show()"<<std::endl;
}
};
int main()
{
Test *p = new SubTest;
p->show();
return ;
}
输出结果:
Test::show()
关于重写与重定义,如果了解了虚函数表的原理,就很容易理解了,
关于虚函数表,可参考C++虚函数表与虚析构函数
C++重载,重写,重定义的更多相关文章
- c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...
- 重载重写重定义-易混淆概念-C++编译器处理方式
1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...
- C++ 重载 重写 重定义
重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰
- C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖
学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...
- C++重写与重载、重定义
文章引用自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/ 重载overload:是函数名 ...
- (转)C++重写、重载和重定义的区别
C++ 重写重载重定义区别 (源自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/) 1 ...
- C++重写(覆盖)、重载、重定义、
总结: 重写(覆盖)override 是指派生类函数重写(覆盖)基类函数 不同的范围,分别位于基类和派生类中 函数的名字相同 参数相同 基类函数必须有virtual关键字 重载overload 成员函 ...
- C++ 虚函数及重载、重定义、重写
#include<iostream> usingnamespace std; class BASE { public: BASE()=default; BASE(int publicVal ...
- C++重写(覆盖)、重载、重定义、多态
1 重写(覆盖)override override是重写(覆盖)了一个方法,以实现不同的功能.一般用于子类在继承父类时,重写(覆盖)父类中的方法.函数特征相同,但是具体实现不同. 重写需要注意: 被重 ...
- C++中重载、重定义、重写概念辨析
重载:函数名相同,函数的参数个数.参数类型或参数顺序三者中必须至少有一种不同.函数返回值的类型可以相同,也可以不相同.发生在一个类内部. 重定义:也叫做隐藏.覆盖,子类重新定义父类中有相同名称的非虚函 ...
随机推荐
- BZOJ 3181 BROJ
像我这种SB还是早点退役. #include<iostream> #include<cstdio> #include<cstring> #include<al ...
- css中的列表属性
list-style-type设定引导列表的符号类型,可以设置多种符号类型,值为disc.circle.square等 list-style-image使用图像作为定制列表的符号 list-style ...
- Shell’s Sort
Solution 1 : (数据结构与算法分析 C++描述 第三版) template<class T> void shellSort(vector<T> &v) { ...
- JQuery源码分析(八)
jQuery的each迭代器 jQuery的each方法从使用上就要分2种情况: $.each()函数 $(selector).each() $.each()函数和$(selector).each() ...
- ZOJ2006 (后缀自动机)
求一个字符串的最小表示法. 将字符串S倍长,从根走length(s)步所走路径即为最小表示法. 记所到达位置为x,则这个最小表示法的起点为a[x]-len(s)+1 ; var T:longint; ...
- Smart210学习记录-------linux内核模块
Linux 驱动工程师需要牢固地掌握 Linux 内核的编译方法以为嵌入式系统构建可运行的Linux 操作系统映像.在编译 LDD6410 的内核时,需要配置内核,可以使用下面命令中的 一个: #ma ...
- dedecms织梦
dedecms的安装,其修改连接数据库文件是:common.inc.php
- 特性节点Attribute
深入理解DOM节点类型第六篇——特性节点Attribute document.getElementById('b_results').attributes[0].textContent documen ...
- vs2013 c++代码内出现中文导致编译错误
简单的做法就是,首先,菜单栏->文件->高级保存选项,选择utf-8 无签名, 然后,如果是发现注释语句里有中文,可以让注释语句与下行代码中间空一行, 如果是代码里有用到中文,那么就在中文 ...
- Java 有理数类 分数类 Rational类的设计与实现
要实现Rational类的加减乘除,要实现其可比较性,要覆盖toString()方法,要实现不同数据类型的转换等. package chapter14; public class Rational e ...