【C/C++】继承中同名成员处理方式

news2024/11/25 14:32:27

一、继承中同名成员处理方式

问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?

  • 访问子类同名成员 直接访问即可
  • 访问父类同名成员 需要加作用域

示例:

class Base {
public:
	Base()
	{
		m_A = 100;
	}

	void func()
	{
		cout << "Base - func()调用" << endl;
	}

	void func(int a)
	{
		cout << "Base - func(int a)调用" << endl;
	}

public:
	int m_A;
};


class Son : public Base {
public:
	Son()
	{
		m_A = 200;
	}

	
	//子类的func()函数会隐藏掉 父亲中所有叫 func 的函数,包括重载的版本。
	void func()
	{
		cout << "Son - func()调用" << endl;
	}
public:
	int m_A;
};

void test01()
{
	Son s;

	cout << "Son下的m_A = " << s.m_A << endl;

	//如果子类想访问父类中被隐藏的同名成员,需要加父类的作用域
	cout << "Base下的m_A = " << s.Base::m_A << endl;	

	cout << "---------------------------- " << endl;



	s.func();	// 直接调用 调用是子类中的同名成员

	s.Base::func();		// 如何调用父类中同名成员函数?加类名作用域。


	//如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏父类中所有版本的同名成员函数。
	//s.func(10); 		//这里是把父类的同名函数隐藏了,但子类却没有实现带参数版本的func函数。所以出错。
	
	s.Base::func(10);

}
int main() {
	test01();
	system("pause");
}

程序运行结果:

Son下的m_A = 200
Base下的m_A = 100
----------------------------
Son - func()调用
Base - func()调用
Base - func(int a)调用

在这里插入图片描述


总结:

  1. 子类对象可以直接访问到子类中同名成员
  2. 子类对象加作用域可以访问到父类同名成员
  3. 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数




二、继承中同名成员处理方式

问题:继承中同名的静态成员在子类对象上如何进行访问?

静态成员和非静态成员出现同名,处理方式一致

  • 访问子类同名成员 直接访问即可
  • 访问父类同名成员 需要加作用域

示例:

class Base {
public:
	static void func()
	{
		cout << "Base - static void func()" << endl;
	}
	static void func(int a)
	{
		cout << "Base - static void func(int a)" << endl;
	}

	static int m_A;
};

int Base::m_A = 100;

class Son : public Base {
public:
	static void func()
	{
		cout << "Son - static void func()" << endl;
	}
	static int m_A;
};

int Son::m_A = 200;

//同名成员属性
void test01()
{
	//通过对象访问
	cout << "通过对象访问: " << endl;
	Son s;
	cout << "Son  下 m_A = " << s.m_A << endl;
	cout << "Base 下 m_A = " << s.Base::m_A << endl;

	//通过类名访问
	cout << "通过类名访问: " << endl;
	cout << "Son  下 m_A = " << Son::m_A << endl;
	cout << "Base 下 m_A = " << Son::Base::m_A << endl;
}

//同名成员函数
void test02()
{
	//通过对象访问
	cout << "通过对象访问: " << endl;
	Son s;
	s.func();
	s.Base::func();

	cout << "通过类名访问: " << endl;
	Son::func();
	Son::Base::func();		// 第一个::代表通过类名方式访问,第二个::代表访问父类作用域下


	//出现同名,子类会隐藏掉父类中所有同名成员函数,需要加作作用域访问
	//Son::func(100);	//这里是把父类的同名函数隐藏了,但子类却没有实现带参数版本的func函数。所以出错。
	Son::Base::func(100);
}
int main() {

	//test01();
	test02();

	system("pause");

	return 0;
}

在这里插入图片描述

程序输出:

通过对象访问:
Son - static void func()
Base - static void func()
通过类名访问:
Son - static void func()
Base - static void func()
Base - static void func(int a)

总结:同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象 和 通过类名)




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLACT: 实时实例分割

论文&#xff1a;https://arxiv.org/abs/1904.02689 代码&#xff1a;https://github.com/dbolya/yolact 图 1&#xff1a;COCO 上各种实例分割方法的速度性能trade-off。据我们所知&#xff0c;我们是第一个在 COCO test-dev 上达到大约 30 个mask mAP 的实时&#xff08;超过…

一文带你了解什么是“三渲二”?

一、什么是三渲二&#xff1f; 有没有在电子游戏或动漫作品中看到一些很独特的画面&#xff0c;里面的物体明明看起来是 3D 的模型&#xff0c;可是呈现出来的视觉效果却更偏向 2D 手绘。 这种技术被称为“三渲二”&#xff08;celshading/toon shading&#xff09;&#xff…

C++中图的存储

文章目录 0. 实例图1. 邻接矩阵2. 邻接矩阵2.1 链表数组2.2 链式前向星 3. 参考 0. 实例图 考虑下面这样一个图 1. 邻接矩阵 vis[i][j] 表示从i 到j有一条边。直接用二维数组就可以了。 using namespace std; int vertex_num 5; vector<vector<int>> graph(v…

网络中一些重要的协议和技术

全文目录 DNSDNS的基本概念&#xff1a;DNS的工作流程&#xff1a; ICMP 协议ICMP的基本概念&#xff1a;常见的ICMP消息类型&#xff1a;ICMP与IP的关系&#xff1a;为什么ICMP是重要的&#xff1f; NAT协议代理服务器正向代理和反向代理 NAT和代理服务器的区别 DNS DNS (域名…

sass制作一个简单的星空背景

最近遇到一个有意思的东西&#xff0c;需要制作一个如下图的背景&#xff1a; 如果使用js或者canvas应该是比较简单的&#xff0c;正好最近在使用sass&#xff0c;那么纯sass能否实现这种效果呢&#xff1f;来试一下 首先来生成这些点&#xff1a; <div class"conten…

浴池探秘:水疗之旅的魅力与奇妙体验

浴室装饰的时候&#xff0c;选择合适的颜色和瓷砖是至关重要的。设计师推出了一系列的瓷砖&#xff0c;这些瓷砖有着独特的纹理和颜色&#xff0c;适合用于浴室的地板和墙壁。这个系列包括三种不同的面层&#xff1a;Terra&#xff08;大地&#xff09;、Lava&#xff08;熔岩&…

【兔子王赠书第5期】ChatGPT速学通:文案写作+PPT制作+数据分析+知识学习与变现

文章目录 前言ChatGPT推荐图书作者简介内容简介推荐理由 粉丝福利尾声 前言 程序员如果有一天代码写不动了&#xff0c;还能干什么&#xff1f; 一位 80 后女程序员“兰猫”给出了她的答案——转型 AI 写手。兰猫从事程序员工作十余年&#xff0c;在繁重的工作压力下&#xf…

[补题记录] Codeforces Round 906 (Div. 2)(A~D)

URL&#xff1a;https://codeforces.com/contest/1890 目录 A Problem/题意 Thought/思路 Code/代码 B Problem/题意 Thought/思路 Code/代码 C Problem/题意 Thought/思路 Code/代码 D Problem/题意 Thought/思路 Code/代码 A Problem/题意 给出一个数组 A…

【基带开发】AD9361 Accumulator 累加器的用法

IP 核 acc_2048 累加多少个数据&#xff0c;计算方法&#xff1a;23-1211&#xff0c;2^11 2048 IP 使用 acc_2048 ACC1 (.B(12d1 ), // input [11 : 0] b.CLK(ad9361_l_clk ), // input clk.CE(1b1 ), // input ce.BYPASS(clk_gens1…

雪花算法:分布式ID生成的优雅解决方案(建议收藏)

在分布式系统中&#xff0c;唯一ID的生成和管理是一项重要而棘手的任务。雪花算法&#xff0c;由Twitter开源的一种分布式ID生成算法&#xff0c;为这个问题提供了一种优雅的解决方案。本文将详细介绍雪花算法的原理、设计和实现&#xff0c;并通过示例代码和图片帮助读者更好地…

Asterisk Ubuntu 安装

更新环境 sudo apt update sudo apt install wget build-essential git autoconf subversion pkg-config libtool sudo contrib/scripts/get_mp3_source.sh A addons/mp3 A addons/mp3/common.c A addons/mp3/huffman.h A addons/mp3/tabinit.c A addons/mp3/Ma…

竞赛选题 深度学习大数据物流平台 python

文章目录 0 前言1 课题背景2 物流大数据平台的架构与设计3 智能车货匹配推荐算法的实现**1\. 问题陈述****2\. 算法模型**3\. 模型构建总览 **4 司机标签体系的搭建及算法****1\. 冷启动**2\. LSTM多标签模型算法 5 货运价格预测6 总结7 部分核心代码8 最后 0 前言 &#x1f5…

TSN工业交换机惊艳亮相第十九届安博会,光路科技展示TSN技术的实际应用

光路科技在第十九届中国国际社会公共安全博览会&#xff08;CPSE安博会&#xff09;上大放异彩&#xff0c;赢得了全球观众的广泛关注。作为展示先进技术和创新解决方案的杰出平台&#xff0c;光路科技无疑成为了此次博览会的焦点之一。 2023CPSE安博会光路科技TSN交换机惊艳亮…

新品发布:信驰达TI CC1352P7双频段多协议模块RF-TI1352P2,支持Matter over Thread

近日&#xff0c;领先的无线物联网通信模块厂商深圳市信驰达科技推出了基于TI CC1352P7 为核心的双频段&#xff08;Sub-1 GHz 和 2.4 GHz&#xff09;多协议无线模块RF-TI1352P2。 RF-TI1352P2模块除了集成负责应用逻辑的高性能 48 MHz ARM Cortex- M4F 主处理器与一个专用于…

AI:48-基于卷积神经网络的气象图像识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

gcc在线升级

提示&#xff1a;本文在线升级需要服务器连接网络 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技…

第5天:基础入门-资产架构amp;端口amp;应用amp;CDNamp;WAFamp;站库分离amp;负载均衡

第5天&#xff1a;基础入门-资产架构&端口&应用&CDN&WAF&站库分离&负载均衡 #知识点&#xff1a;1. 资产架构-端口&目录&插件接口&多站点&多应用 2. 番外安全-域名&服务器本身&服务厂商&管理人员 3. 考虑阻碍-站库分离&am…

【flink】Task 故障恢复详解以及各重启策略适用场景说明

文章目录 一. 重启策略种类&#xff08;Restart Strategies&#xff09;1. Fixed Delay Restart Strategy2. Failure Rate Restart Strategy3. Fallback Restart Strategy4. No Restart Strategy 二. 故障恢复策略&#xff08;Failover Strategies&#xff09;1. &#xff08;全…

Pycharm 关闭项目卡住

1、升级到最新版本 2、清理缓存 全部勾上 3、修改本地索引 设置找到下面这个&#xff0c;改为&#xff1a;不下载&#xff0c;使用本地索引 4、有人说是和插件有关 pycharm v2023.1.2&#xff0c;我是清理缓存加本地索引解决的&#xff0c;之前 Pycharm 弹了一个窗&#xff0…

佳能R6 m2没有样本文件时的设置方法

佳能R6 m2使用了新的DEC标识和小块长度&#xff0c;一般情况下建议使用加载样本的方式进行处理&#xff0c;如果没有样本也可以使用以下方法。 适用程序:CHS零壹视频恢复程序标准版/专业版/高级版/佳能版 解决问题: 底层原始文件会识别出错&#xff0c;导致很多个小碎片。 …