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;
}

最新文章

  1. css3 transfrom变换
  2. mysql 任意连接
  3. Python的高级Git库 Gittle
  4. 杭电ACM2085--核反应堆
  5. 版本控制工具git入门
  6. Win32串口API
  7. js移动端横竖屏检测
  8. 从头到尾彻底解析Hash 表算法
  9. 通过JS动态的修改HTML元素的样式和增添标签元素等
  10. dbus-launch
  11. spring Boot异步操作报错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type &#39;com.self.spring.springboot.Jeep&#39; available
  12. Tensorflow图像处理以及数据读取
  13. Linux下安装GEOS环境
  14. unity UGUI UI跟随
  15. Sort Array By Parity II LT922
  16. Linux命令一览
  17. CAP定理为什么只能同时满足两个
  18. ImageView和onTouchListener实现,点击查看图片细节
  19. linux常用命令全拼
  20. C语言的参数传递

热门文章

  1. JS中数组和字符串的方法大全
  2. SAS中的剔除空格函数
  3. LinkedList源码和并发问题分析
  4. Tomcat安装及问题排查方法
  5. ACM Ignatius and the Princess II
  6. Java第5次实验提纲(Java图形界面编程)
  7. RunLoop总结:RunLoop的应用场景(四)
  8. Lua热更新(hotfix)
  9. Java线程状态
  10. ROS探索总结(十六)——HRMRP机器人的设计