当前位置: 首页 > news >正文

29.C++多态 2 (重载,重定义(隐藏),重写 三者的区别)

⭐上篇文章:28.C++多态1 (多态的概念与简单使用,虚函数,final,override)-CSDN博客

⭐标⭐是比较重要的部分

一. 重载

        重载是两个函数的名称相同,参数列表不同(顺序,类型,数量不同),这样的两个函数构成重载。

比如:

#include <iostream>
using namespace std;

int test(int a, int b)
{
	return a + b;
}

int test(int a, double b)
{
	return a + b;
}


int main()
{
	return 0;
}

上面的两个test函数构成重载 

二. 重定义

        重定义是有继承关系的两个类中,父类和子类都有一个同名函数,但是这个同名函数参数列表可能不同,而且没有使用virtual关键字进行修饰。

        这两个函数的作用域不同

代码举例:

#include <iostream>
using namespace std;

class A
{
public:
	void test()
	{
		cout << "我是类A" << endl;
	}
};

class B : public A
{
public:
	void test()
	{
		cout << "我是类B" << endl;
	}
};


int main()
{
	A a;
	B b;
	a.test();
	b.test();
	return 0;
}

        上面的A类和B类中的test就构成重定义 

测试结果如下:

 可以看到,对象调用自己类中的test函数

如果使用基类的指针或者引用去引用B类的对象,仍是调用A类的test

代码如下:

#include <iostream>
using namespace std;

class A
{
public:
	void test()
	{
		cout << "我是类A" << endl;
	}
};

class B : public A
{
public:
	void test()
	{
		cout << "我是类B" << endl;
	}
};


int main()
{
	B b;
	A* pa = &b;
	A& a = b;
	pa->test();
	a.test();
	return 0;
}

测试结果如下:

可以看到,都是调用了A类的test        输出了我是类A 

三. 重写

        成员函数重写是构成多态的两个条件之一,需要使用virtual关键字进行修饰。

重写的两个函数的名称和参数必须相同(协变和析构除外)

重写的两个函数需要使用virtual进行修饰

如下面代码中的两个函数就构成重写 

#include <iostream>
using namespace std;

class A
{
public:
	virtual void test()
	{
		cout << "我是类A" << endl;
	}
};

class B : public A
{
public:
	virtual void test()
	{
		cout << "我是类B" << endl;
	}
};


int main()
{
	A* a = new A();
	A* b = new B();
	a->test();
	b->test();
	return 0;
}

 测试结果如下:

四.总结

相关文章:

  • git常用命令(时常更新)
  • 医疗影像分割中的半监督学习实践:从算法原理到CT/MRI实战
  • MybatisPlus-扩展功能-枚举处理器
  • 【linux配置】 修改内核网络参数
  • Linux之loop设备(Loop Devices in Linux)
  • 冯诺依曼体系结构和操作系统
  • 逆向pyinstaller打包的exe软件,获取python源码(4)
  • Vue2+OpenLayers实现右键菜单功能(提供Gitee源码)
  • 【OMCI实践】ONT上线过程的omci消息(六)
  • 2、并行和并发有什么区别【中高频】
  • Linux | YUM / RPM 常用命令
  • CSDN 博客:CC++ 内存管理详解
  • 2.部署kafka:9092
  • 1.2.2 ASPICE的过程计划
  • 奇安信率先使用DeepSeek落地金融行业了
  • 前端如何解决跨域
  • Python 字符串(str)全方位剖析:从基础入门、方法详解到跨语言对比与知识拓展
  • 夜莺监控 - 边缘告警引擎架构详解
  • Linux(centos)安装 MySQL 8 数据库(图文详细教程)
  • QNX上如何抓tracelogger日志
  • ps做素材下载网站有哪些/免费外网加速器
  • java做网站的软件/百度指数分析平台
  • 响应式网站psd/百度浏览器官网下载
  • 供求信息网站建设报价/东莞网络推广
  • 广东网站开发公司/全球搜索引擎大全
  • 网站服务器选择什么操作系统/成人大学报名官网入口