1、函数重载

1)必须在同一个类中进行。

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

3)重载是在编译期间根据参数类型和个数决定函数调用

2、函数重写

1)必须发生于父类与子类之间

2)并且父类与子类中的函数必须有完全相同的原型

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

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

demo

#include <iostream>
using namespace std;

//重写 重载 重定义
//重写发生在2个类之间
//重载必须在一个类之间

//重写分为2类
//1 虚函数重写  将发生多态
//2 非虚函数重写 (重定义)

class Parent
{
	//这个三个函数func都是重载关系
public:

	virtual void func()
	{
		cout << "func() do..." << endl;
	}

	virtual void func(int i)
	{
		cout << "func() do..." << i << endl;
	}

	virtual void func(int i, int j)
	{
		cout << "func() do..." << i << " " << j << endl;
	}

	virtual void func(int i, int j, int m, int n)
	{
		cout << "func() do..." << i << " " << j << endl;
	}

	void abc()
	{
		printf("abc");
	}

protected:
private:
};

class Child : public Parent
{

public:

	virtual void func(int i, int j)
	{
		cout << "func(int i, int j) do..." << i << " " << j << endl;
	}

	virtual void func(int i, int j, int k)
	{
		cout << "func(int i, int j) do.." << endl;
	}

	void abc()
	{
		printf("child abc");
	}
	/*
	void abc(int a)
	{
	printf("child abc");
	}
	*/
protected:
private:
};

//重载重写和重定义
int main()
{
	//: error C2661: “Child::func”: 没有重载函数接受 0 个参数
	Child c1;

	//c1.func();
	//子类无法重载父类的函数,父类同名函数将被名称覆盖
	c1.Parent::func();

	//1 C++编译器看到func名字,因子类中func名字已经存在了(名称覆盖).所以c++编译器不会去找父类的4个参数的func函数
	//2 c++编译器只会在子类中,查找func函数,找到了两个func,一个是2个参数的,一个是3个参数的.
	//3 C++编译器开始报错.....  error C2661: “Child::func”: 没有重载函数接受 4 个参数
	//4 若想调用父类的func,只能加上父类的域名..这样去调用..
	c1.func(1, 3, 4, 5);

	//c1.func();
	//func函数的名字,在子类中发生了名称覆盖;子类的函数的名字,占用了父类的函数的名字的位置
	//因为子类中已经有了func名字的重载形式。
	//编译器开始在子类中找func函数。。。。但是没有0个参数的func函数 

	return 0;
}

重载重写重定义-易混淆概念-C++编译器处理方式的更多相关文章

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

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

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

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

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

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

  4. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  5. 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  6. C#中一些易混淆概念总结

    C#中一些易混淆概念 这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框 ...

  7. 【C#小知识】C#中一些易混淆概念总结(五)---------继承 分类: C# 2014-02-06 22:05 1106人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  8. 【C#小知识】C#中一些易混淆概念总结(五)---------深入解析C#继承

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  9. 【C#小知识】C#中一些易混淆概念总结(四)---------解析Console.WriteLine() 分类: C# 2014-02-05 17:18 1060人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) [C#小知识]C#中一些易混淆概念总结(三) ------------------------------ ...

随机推荐

  1. 开源小工具 - swagger API访问代码生成器(js/typescript)

    现在流行前后端分离,后端通常会使用swagger生成api文档,提供给前端的同事来调用,一般前端是查看这个文档,根据文档说明编写调用代码.其实,swagger已经提供了足够多的描述信息,我们可以基于s ...

  2. Python笔记(一)——打印输出

    一.输出语句input    输出语句print 例:用户输入 username = input("username:") #变量名 显示的字符 password = input( ...

  3. 注解式Schedule配置定时任务

    @Component public class ScheduledTasks { @Autowired private ActivityService activityService; // 1000 ...

  4. lgp20151222 java中如何将Object类型转换为int类型

    if (object instanceof Integer) {    Integer.parseInt(object.toString()); } 很简单是不是?我就想提醒下自己,java有个特殊词 ...

  5. 【Java关键字-Interface】为什么Interface中的变量只能是 public static final

    三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...

  6. Axios 使用文档

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 使用实例:http://www.cnblogs.com/coolslider/p/7838309.ht ...

  7. Lintcode393 Best Time to Buy and Sell Stock IV solution 题解

    [题目描述] Say you have an array for which the i th element is the price of a given stock on day i. Desi ...

  8. C# WMI 远程PC(开机、关机、重启)

    啥也不多说,直接上码: //远程重启方法 public static bool Shutdown(ManagementScope scope) { ObjectQuery query=new Obje ...

  9. JS基础(二)

    一.JS中的循环结构 循环结构的执行步骤 1.声明循环变量: 2.判断循环条件: 3.执行循环体操作: 4.更新循环变量 然后,循环执行2-4,直到条件不成立时,跳出循环. while循环()中的表达 ...

  10. delphi 线程教学第四节:多线程类的改进

    第四节:多线程类的改进   1.需要改进的地方   a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数 ...