C++进阶学习(5)继承中的重名成员与静态成员

文章目录

    • 一、重名成员
      • 1.重名数据成员
      • 2.重名成员函数
    • 二、派生类中访问静态成员

一、重名成员

派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽了基类的同名成员
在派生类中使用基类的同名成员,显式地使用类名限定符:

类名 :: 成员 

1.重名数据成员

例:
class  base{ public :int  a ,  b ;  } ;
class  derived : public  base{ public :  int  b ,  c ; } ;
void  f ()
{ derived  d ;d . a = 1 ;d . base :: b = 2 ;d . b = 3 ;d . c = 4 ;
};

基类成员的作用域延伸到所有派生类
派生类的重名成员屏蔽基类的同名成员

2.重名成员函数

#include<iostream>	
using namespace std ;
class A
{ public:	  int a1, a2 ;A( int i1=0, int i2=0 ) { a1 = i1; a2 = i2; }void print() { cout << "a1=" << a1 << '\t' << "a2=" << a2 << endl ; }
};
class B : public A
{ public:	int b1, b2 ;B( int j1=1, int j2=1 ) { b1 = j1; b2 = j2; }void print()		//定义同名函数{ cout << "b1=" << b1 << '\t' << "b2=" << b2 << endl ; }void printAB(){ A::print() ;		//派生类对象调用基类版本同名成员函数print() ;		//派生类对象调用自身的成员函数}
};
int main()
{ B  b ;        b.A::print();	b.printAB();  }

通过继承,类B具有两个同名成员函数
void A::print(); // void print( A * this );
void B::print(); // void print( B * this );

派生类也是基类,基类指针可以指向
派生类对象
派生类中定义与基类同名的成员函数,
称为重载成员函数

二、派生类中访问静态成员

基类定义的静态成员,将被所有派生类共享

根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质

派生类中访问静态成员,用以下形式显式说明:

类名 :: 成员

​ 或通过对象访问 对象名 . 成员

#include<iostream>
using namespace std ;
class B
{ public:static void Add() { i++ ; }//静态成员函数static int i;//静态数据成员void out() { cout<<"static i="<<i<<endl; }
};
int B::i=0;
class D : private B
{ public:    void f() { i=5;//i 是类D的私有静态数据成员类中可见Add();//Add()是类D的私有静态成员函数类中可调用B::i++;//访问B类的静态成员B::Add();}
};
int main()
{ B x;  D y;x.Add();x.out();y.f();cout<<"static i="<<B::i<<endl;//访问B类的静态数据成员cout<<"static i="<<x.i<<endl;//通过B类对象访问静态数据成员//cout<<"static i="<<y.i<<endl;
}

注意

  1. D中的i是一个普通的变量,而不是静态数据成员。因为在类D中定义的i是通过继承自类B的,而不是在类D中重新声明的静态数据成员。

  2. 在类D中的成员函数f()中,对i的操作是针对类D中的普通变量i,而不是类B中的静态数据成员i。因此,i=5;Add();B::i++;B::Add(); 这些操作都是针对类D中的i

  3. main()函数中,通过类D的对象y调用f()函数时,会对类D中的i进行操作,而不会对类B中的静态数据成员i进行操作。

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

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

相关文章

dapr学习

dapr学习 5.1、概念知识 官方文档&#xff1a; Dapr 配置选项概述 | Dapr 文档库 run CLI 命令参考 | Dapr 文档库 该部分持续更新中… dapr云原生框架&#xff0c;服务于开发人员的&#xff0c;是一个cs服务框架 5.2、dapr配置redis中间件组件 1、首先下载redis进行并…

国产算力芯片排行榜前十名

算力芯片是指用于进行大规模计算的集成电路芯片&#xff0c;它的性能和效率将直接影响到人工智能、大数据分析、密码学和区块链等领域的发展。近年来&#xff0c;随着国内算力芯片制造企业的迅速崛起&#xff0c;国产算力芯片在技术研发和市场表现上都取得了显著的进步。下面就…

CBO VS ABO,哪种策略才更能优化FB广告?

海外创业时&#xff0c;FB广告无疑是吸引目标受众、推动业务增长的重要渠道之一&#xff01;然而令大家头疼的却是在CBO与ABO的选择上&#xff0c;今天就带大家一起解读这两种常见的广告策略。了解两者之间的区别、优缺点及适用场景。 CBO 和 ABO 分别是什么&#xff1f; CBO&a…

从数据治理到数据资产管理,释放新质生产力

在当前的数字化浪潮中&#xff0c;数据作为第五大生产要素&#xff0c;正日益成为企业激活新质生产力的关键引擎。数据治理和数据资产管理作为数据管理的重要环节&#xff0c;对企业提升竞争力、实现数字化转型具有重大意义。本文将对数据治理和数据资产管理进行深入探讨&#…

vue3封装Element动态表单组件

1. 封装组件DymanicForm.vue 使用component实现动态组件组件不能直接使用字符串传入&#xff0c;所以根据传入的组件名称找到对应的组件校验规则&#xff0c;可使用rule传入自定义规则&#xff0c;也可以使用封装好的基本规则 示例中使用了checkRequired暴露重置方法和校验方法…

python_1

要求&#xff1a; 代码&#xff1a; # 先将分钟数转化成年数&#xff0c;再将余数做为天数 minute float(input("请输入分钟数&#xff1a;")) year_1 (minute / 60 / 24) // 365 day_1 (minute / 60 / 24) % 365 now f"{minute}分钟{year_1}年{day_1}天&q…

Cocos2dx-lua ScrollView[三]高级篇

一.概述 本文缩写说明:sv = ScrollView, cell代表ScrollView的一个子节点 本文介绍sv的一种封装类库,来实现快速创建sv,有如下几个优点: 1.item的位置通过参数控制,提高开发效率 2.免去了调用sv的API,提高开发效率 3.分帧创建,提高性能 4.可通过参数控制,复用ite…

250.voc,vok 声音,叫喊

250.voc,vok 声音,叫喊 vocal  【vəukəl】 adj. 【voc 声,-al …的】 有声的;用语言表达的,口述的;歌唱的 vocalism  【vəukəlizəm】 n. 【见上,-ism 表行为】 发声;歌唱 vocalist  【vəukəlist】 n. 【见上,-ist 者】 歌唱者;声乐家 vocalize  【vəukə…

《Python编程快速上手——让繁琐工作自动化》实践项目——物品清单

题目&#xff1a; 整个题目篇幅比较大。简化一下就是编写addToInventory函数并且返回一个字典。 思路&#xff1a;函数displayInventory用于物品清单的最后输出&#xff0c;而addToInventory是用于处理战利品的&#xff0c;在原来的装备上添加&#xff0c;已有的装备直接数量加…

Nginx超详细讲解+实操

前言 nginx作为当今火爆的、高性能的http及反向代理服务&#xff0c;不管前端还是后端&#xff0c;都需要全面去了解&#xff0c;学习&#xff0c;实操。 nginx 介绍 为了有一个全面的认知&#xff0c;接下来我们先来看看nginx的架构以及一些特点。 nginx 特点 处理响应请…

安卓系统与iOS对比:两大移动操作系统各有千秋

原文地址&#xff1a;dlshuhua.com/post/79134.html 在当前的移动设备市场中&#xff0c;安卓系统和iOS系统无疑是两大主导力量。它们各自具有独特的优点和特点&#xff0c;吸引了不同需求的用户群体。本文将详细对比这两个系统&#xff0c;分析它们各自的优劣&#xff0c;以帮…

QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”

1、项目场景&#xff1a; 在VS中采用QT&#xff08;C&#xff09;调试时&#xff0c;出现error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”错误 2、解决方案&#xff1a; 在“解决方案资源管理器”中选中出现此类BUG的项目&#xff0c;右键-…

静态路由表学习实验

实验要求&#xff1a;各个pc设备可以通信&#xff0c;并且可以访问外网&#xff0c;假设R1已连接外网 拓扑结构 思路&#xff1a;配置pc机ip地址&#xff0c;子网掩码&#xff0c;和网关&#xff08;网关地址是上层路由接口的地址&#xff09;&#xff0c;配置路由各个接口地址…

什么是LLM Agent?

引言&#xff1a; LLM Agent 已经成为大语言模型中最有价值的探索方向&#xff0c;也更趋于最前沿的通用人工智能。构建企业自己的 LLM Agent 有助于企业在最前沿的人工智能领域探索具有完全自主性的智能化能力&#xff0c;包括基于企业知识库、企业工具 API&#xff08;如&am…

element-plus中的日期时间选择器el-date-picker;日期选择面板中选定起始与结束的日期只能改具体的时刻,日期默认是一个月没法动态修改问题

目前遇到一个问题&#xff0c;在使用element-plus中的日期时间选择器el-date-picker&#xff0c;type为datetimerange时&#xff0c;展示的日期选择面板有两个输入框&#xff0c;开始时间和结束时间&#xff0c;element-plus只提供了default-time 使用datetimerange进行范围选择…

Visio中存在问题的解决方法

公式缩放 mathtype公式在visio缩放之后&#xff0c;出现了变形。 解决方法&#xff1a;每次输入公式都通过 插入->对象->mathType Equation 新建一个公式。可以避免 注&#xff1a;网上有的说在word中使用mathtype编写公式&#xff0c;之后复制到visio中。 插入波形 选择…

超算数据中心是什么?

小万今天主要是带大家一起来了解什么是超算数据中心&#xff0c;相信大家都听过计算机和数据中心&#xff0c;但是超算数据中心又是什么呢&#xff1f; 随着互联网的快速发展&#xff0c;人工智能、云技术和大数据等诸多新兴产业逐渐步入人们的生活当中。这些新兴技术的发展离不…

LinkedIn 互联网架构扩展简史

LinkedIn成立于 2003 年&#xff0c;其目标是连接到您的网络以获得更好的工作机会。第一周只有 2,700 名会员。时间快进了很多年&#xff0c;LinkedIn 的产品组合、会员基础和服务器负载都取得了巨大的增长。 如今&#xff0c;LinkedIn 在全球运营&#xff0c;拥有超过 3.5 亿会…

fuzzywuzzy,一个好用的 Python 库!

目录 前言 安装 基本功能 1. 字符串相似度比较 2. 模糊匹配与排序 实际应用场景 1. 数据清洗 2. 文本匹配与搜索 3. 搜索引擎优化 总结 前言 大家好&#xff0c;今天为大家分享一个好用的 Python 库 - fuzzywuzzy Github地址&#xff1a;https://github.com/seatgeek/fu…

企业如何乘上跨境电商的风口?

近年来&#xff0c;国内跨境电商成为内贸外贸发展的一个亮点&#xff0c;国家工作会议也提出&#xff1a;“要加快培育外贸新动能&#xff0c;巩固外贸外资基本盘&#xff0c;拓展中间品贸易、服务贸易、数字贸易、跨境电商出口”。多因素推动下&#xff0c;使得跨境电商成为我…