函数重载:

必须在同一个类中进行;

子类无法重载父类的函数,父类同名函数将被子类名称覆盖;

重载是在编译期间根据参数类型和个数决定函数的调用(静态联编)。

函数重写与重定义:

重写:

必须发生在基类和派生类之间,并且父类与子类的函数必须有完全相同的函数原型;

使用virtual关键字声明之后能够产生多态(如果不使用virtual,那叫重定义);

多态是在运行期间根据具体对象的类型决定函数调用(动态联编)。

代码分析:

 #include<iostream>
using namespace std; class Parent {
public:
virtual void fuc()
{
cout << "parent 无参fuc...\n";
}
virtual void fuc(int i)
{
cout << "parent 1参fuc...\n";
}
virtual void fuc(int i,int j)
{
cout << "parent 2参fuc...\n";
} };
class Child1 : public Parent
{
public:
virtual void fuc(int i, int j)
{
cout << "child 2参fuc...\n";
}
virtual void fuc(int i, int j,int k)
{
cout << "child 3参fuc...\n";
}
}; int main()
{
Child1 c1;
c1.fuc();
return ;
}

报错如下:

前面已经说过,子类无法重载父类函数,并且,子类同名函数会覆盖父类函数,所以,子类c1访问fuc函数,是没有参数的,编译器在child1中找到了fuc函数的名字,就不会去父类再找了,而child1类中没有提供无参数的fuc函数重载,所以报错,要想访问父类的无参fuc函数,可以加域作用符:

c1.Parent::fuc();

c++之——重载、重写、重定义的更多相关文章

  1. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

  2. 重载重写重定义-易混淆概念-C++编译器处理方式

    1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...

  3. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰

  4. C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

    学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...

  5. C++重写与重载、重定义

    文章引用自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/ 重载overload:是函数名 ...

  6. (转)C++重写、重载和重定义的区别

    C++ 重写重载重定义区别 (源自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/) 1 ...

  7. C++重写(覆盖)、重载、重定义、

    总结: 重写(覆盖)override 是指派生类函数重写(覆盖)基类函数 不同的范围,分别位于基类和派生类中 函数的名字相同 参数相同 基类函数必须有virtual关键字 重载overload 成员函 ...

  8. C++ 虚函数及重载、重定义、重写

    #include<iostream> usingnamespace std; class BASE { public: BASE()=default; BASE(int publicVal ...

  9. C++重写(覆盖)、重载、重定义、多态

    1 重写(覆盖)override override是重写(覆盖)了一个方法,以实现不同的功能.一般用于子类在继承父类时,重写(覆盖)父类中的方法.函数特征相同,但是具体实现不同. 重写需要注意: 被重 ...

  10. C++中重载、重定义、重写概念辨析

    重载:函数名相同,函数的参数个数.参数类型或参数顺序三者中必须至少有一种不同.函数返回值的类型可以相同,也可以不相同.发生在一个类内部. 重定义:也叫做隐藏.覆盖,子类重新定义父类中有相同名称的非虚函 ...

随机推荐

  1. logging日志管理-将日志写入文件

    # -*- coding: cp936 -*- # test.py #http://blog.chinaunix.net/uid-27571599-id-3492860.html #logging日志 ...

  2. 普通spring jsp+mybatis项目修改为springboot + jsp +mybatis项目

    概述 由于公司决定使用spring cloud,但是公司积累了大量的普通的jsp项目,老的项目直接全部修改为springboot成本过高,周期比较长,而且公司业务正在快速拓展,所以需要把之前的老项目修 ...

  3. [转载]meclipse中project facet问题

    原文地址:meclipse中project facet问题作者:丫头_樱桃 一般出现在从别处import的项目上,只有项目文件夹上有红叉,其他地方都正常,现总结个人的几个解决方案: 有几种可能: 1, ...

  4. <%@ include file="">和<jsp:include file="">区别

    <%@include file="a.jsp"%>是在编译时加入,所谓静态,就是在编译的时候将jsp的代码加入进来再编译,之后运行. <jsp:include p ...

  5. 使用免费ip代理进行投票

    只要是投票系统,必然要限制一个用户投多张票. 如何限制呢?限制ip是最直观最简单的思路,可是代理池可以解决限制ip的情况. 如果投票页面前面加上一个验证码,那程序就会有点困难了. 有些投票使用微信号, ...

  6. 10个常见的Android 新手误区

    在过去十年的移动开发平台中,作为资深的移动开发人员,我们认为Android平台是一个新手最广为人知的平台.它不仅是一个廉价的工具,而且有着良好的开发社区,以及从所周知的编程语言(Java),使得开发A ...

  7. redis 学习札记4-sortset

    redis 学习笔记4--sortset redis学习笔记3--sortSet 终于到最后一个数据结构了,加油!! 整体结构图: http://dl.iteye.com/upload/picture ...

  8. AP_建立银行信息总行、分行、账户(设定)

    2014-06-04 Created By BaoXinjian

  9. Openresty增加waf配置

    Openresty增加waf配置 1. Ngx lua waf 说明 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击 防止svn/备份之类文件泄漏 防止Apach ...

  10. jsp指令和重定向

    1 声明指令 格式:<%!声明变量或函数 %> 作用:会生成一个成员变量或成员方法,也可以使用访问修饰符修饰,public,private,protected 2 注释指令 格式:< ...