【C++】类和对象---const成员,取地址及const取地址操作符重载,static成员

目录

⭐const成员

⭐取地址及const取地址操作符重载

⭐static成员

⭐概念

⭐特性

 



⭐const成员

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数
隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

 看看下面的代码

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << "Print()" << endl;cout << "year:" << _year << endl;cout << "month:" << _month << endl;cout << "day:" << _day << endl << endl;}void Print() const{cout << "Print()const" << endl;cout << "year:" << _year << endl;cout << "month:" << _month << endl;cout << "day:" << _day << endl << endl;}
private:int _year; // 年int _month; // 月int _day; // 日
};
void Test()
{Date d1(2022, 1, 13);d1.Print();const Date d2(2022, 1, 13);d2.Print();
}

 运行结果:

  • 左图中有两个Print()函数,一个是const成员函数,另一个不是const成员函数
  • 右图中只有一个const成员函数的Print()

对比两个的运行结果可以发现:

  • const对象只能调用const成员函数
  • 非const对象既可以调用const成员函数,也可以调用非const成员函数

请思考下面的几个问题:
1. const对象可以调用非const成员函数吗?

        不可以,const修饰了隐藏的this指针,调用非const成员函数属于权限的放大,不可行。
2. 非const对象可以调用const成员函数吗?

        可以,允许这种权限缩小的行为
3. const成员函数内可以调用其它的非const成员函数吗?

        不可以,权限放大了
4. 非const成员函数内可以调用其它的const成员函数吗?

        可以,是权限的缩小

⭐取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
 

class Date
{
public:Date* operator&(){return this;}const Date* operator&()const{return this;}
private:int _year; // 年int _month; // 月int _day; // 日
};

 可以发现,无论写不写这两个重载函数,都可以正确地取地址,这就是因为这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需
要重载,比如想让别人获取到指定的内容(不过多介绍)

⭐static成员

⭐概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用
static修饰的成员函数,称之为静态成员函数静态成员变量一定要在类外进行初始化

一个思考题:实现一个类,计算程序中创建出了多少个类对象。

设置一个变量来记录创建类对象的个数,因为始终要对同一个变量进行操作,所以这个变量要设置成静态的成员变量,通过静态的成员函数来访问这个变量的大小。

#include<iostream>
using namespace std;
class A
{
public:A() { ++_scount; }A(const A& t) { ++_scount; }~A() { --_scount; }static int GetACount() { return _scount; }
private:
//声明
//不属于某一个对象,属于所有对象,属于整个类,不能给缺省值static int _scount;//要对同一个n进行操作,就要写成静态了
};
int A::_scount = 0;//在类外面定义
void TestA()
{cout << A::GetACount() << endl;//静态成员函数才可以这么访问A a1, a2;A a3(a1);cout << A::GetACount() << endl;
}
int main()
{TestA();return 0;
}

⭐特性

  1.  静态成员为所有类对象所共享,不属于某个具体的对象存放在静态区
  2.  静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3.  类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
  4.  静态成员函数没有隐藏的this指针不能访问任何非静态成员
  5.  静态成员也是类的成员受public、protected、private 访问限定符的限制

【问题】

  1. 静态成员函数可以调用非静态成员函数吗?       不可以,静态成员函数没有this指针,不能访问非静态的成员变量
  2. 非静态成员函数可以调用类的静态成员函数吗?             可以的,它们都在同一个类里面
     

 

___________________________________________________________________________________

⭐感谢你的阅读,希望本文能够对你有所帮助。如果你喜欢我的内容,记得点赞关注收藏我的博客,我会继续分享更多的内容。⭐

 

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

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

相关文章

Nginx服务介绍与部署管理

目录 一、Nginx相关介绍 1. 概述 2. 优缺点 3. 零拷贝技术 4. I/O模型相关概念 5. 网络I/O模型 5.1 阻塞型I/O模型 5.2 非阻塞型I/O模型 5.3 多路复用I/O型 5.4 信号驱动式I/O模型 5.5 异步I/O模型 6. 事件驱动模型 7. Nginx与Apache区别 二、Nginx部署和使用 1…

哪些工具可以改变手机电脑网络IP地址?

在互联网时代&#xff0c;网络已经成为了我们日常生活中不可或缺的一部分。然而&#xff0c;随着网络的普及和技术的不断发展&#xff0c;网络安全问题也日益凸显。为了保护个人隐私和信息安全&#xff0c;我们需要了解一些工具可以改变手机电脑网络IP地址的知识。 首先&#x…

【Java面试】MQ(Message Queue)消息队列

目录 一、MQ介绍二、MQ的使用1应用解耦2异步处理3流量削峰4日志处理5消息通讯三、使用 MQ 的缺陷1.系统可用性降低:2.系统复杂性变高3.一致性问题四、常用的 MQActiveMQ:RabbitMQ:RocketMQ:Kafka:五、如何保证MQ的高可用?ActiveMQ:RabbitMQ:RocketMQ:Kafka:六、如何保…

stm32——hal库学习笔记(串口<一>)

这里写目录标题 一、数据通信的基础概念&#xff08;了解&#xff09;1.1&#xff0c;串行/并行通信1.2&#xff0c;单工/半双工/全双工通信1.3&#xff0c;同步/异步通信1.4&#xff0c;波特率1.5&#xff0c;常见的串行通信接口 二、串口(RS-232)&#xff08;熟悉&#xff09…

九州金榜|假期即将结束,如何让孩子快速进入学习状态

临近假期结束&#xff0c;很多孩子都还在沉寂在假期之中&#xff0c;很难收心安心学习&#xff0c;也是在这个时候很多家长都会头疼&#xff0c;孩子不收心就会不可避免影响学习&#xff0c;家长对此也是很无奈&#xff0c;下面九州金榜金榜家庭教育给出以下建议&#xff0c;让…

中科大郝记华教授获2024年F.W.克拉克奖

近日&#xff0c;从国际地球化学学会(Geochemical Society)获悉&#xff0c;中国科学技术大学地球和空间科学学院郝记华教授获得2024年F.W.克拉克奖&#xff08;F.W. Clarke Awards&#xff09;。 图源&#xff1a;国际地球化学学会官网 郝记华教授是首位在中国工作的获奖者。他…

什么是nginx 、安装nginx

一、 什么是nginx 1.1 nginx的概念 一款高新能、轻量级Web服务软件系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 1.2 nginx模块与作用 核心模块&#xff1a;是 Nginx 服务器正常运行必不可少的模块&#xff0c;提供错…

ARM处理器运行Windows系统的三防加固平板|亿道三防

大家好&#xff01;今天我要为大家介绍一款引人注目的三防加固平板电脑——亿道三防系列产品。它们采用高通ARM处理器&#xff0c;并能够运行Windows 11操作系统&#xff0c;给用户带来了前所未有的强大性能和多样化的应用体验。 首先&#xff0c;让我们来聊聊这款平板电脑的核…

2024最新版Redis安装使用指南

2024最新版Redis安装使用指南 Installation and Usage Guide to the Latest Redis in 2024 By JacksonML 1. 什么是Redis? The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, an…

星河做市基金会全球DAO社区启动,为数字货币市场注入新活力

2024年的数字货币市场即将迎来一次重要的历史性时刻 — 比特币减半&#xff0c;这四年一次的事件将成为全球数字资产市场的焦点&#xff0c;预示着新一轮的牛市浪潮即将到来。在这个关键时刻&#xff0c;星河做市基金会展现出其作为区块链行业领先市值管理公司的独特魅力。 GA…

初体验 在Dell R7525 服务器 RTX 3090 安装Chat with RTX

理论上是不建议在服务器上安装消费级的显卡&#xff0c;奈何数据中心的显卡需要额外的License才能体验RTX功能或者需要修改模式的方式如 A40 是可以做切换的。 一开始安装是失败的&#xff0c;现在想起来应该是和网络是相关的&#xff0c;所有首先需要做好科学网络才行&#x…

一文了解大数据生态

大数据一词最早指的是传统数据处理应用软件无法处理的过于庞大或过于复杂的数据集。 现在&#xff0c;对“大数据”一词的使用倾向于使用预测分析、用户行为分析或者其他一些从大数据中提取价值的高级数据分析方法&#xff0c;很少用于表示特定规模的数据集。 定义 大数据是…

LeetCode 450.删除二叉搜索树中的节点和669.修建二叉搜索树思路对比 及heap-use-after-free问题解决

题目描述 450.删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;…

[Android]Frida-hook环境配置

准备阶段 反编译工具:Jadx能够理解Java语言能编写小型的JavaScript代码连接工具:adb设备:Root的安卓机器&#xff0c;或者模拟器 Frida&#xff08;https://frida.re/&#xff09; 就像是你计算机或移动设备的妙妙工具。它帮助你查看其他程序或应用内部发生的事情&#xff0…

pipx — 在隔离环境中安装和运行 Python 应用程序

pipx官网&#xff1a; https://pipx.pypa.io/stable/ pipx pipx 是一个用于安装和运行Python应用程序的工具&#xff0c;它类似于 Linux的 apt 和JavaScript 的 npx 。 pipx和pip的区别&#xff1a; pip是一个通用的python包安装工具pipx专注于安装python cli程序 cli&#…

TLS、运输层安全协议

目录 运输层安全协议 1 协议 TLS 的要点 1.1 协议 TLS 的位置 1.2 TLS 与应用层协议独立无关 1.3 协议 TLS 具有双向鉴别的功能 1.4 TLS 建立安全会话的工作原理 TLS 的握手阶段 TLS 的会话阶段 1.5 TLS 传送的记录格式 2 协议 TLS 必须包含的措施 运输层安全协议 现…

Python urllib模块学习

HTTP协议 HTTP 协议&#xff1a;一般指HTTP(超文本传输)协议。 HTTP是为Web浏览器和Web服务器之间的通信而设计的&#xff0c;基于TCP/IP通信协议嘞传递数据。 HTTP消息结构 客户端请求消息 客户端发送一个HTTP请求到服务器的请求消息包括以下格式 请求行(request line)请求…

mysql 2-20

TEXT类型 枚举类型 SET类型 二进制字符串类型 BLOB类型 注意事项 JSON类型 提取数据 空间类型 选择建议 约束

HQYJ 2024-2-21 作业

复习课上内容&#xff08;已完成&#xff09;结构体字节对齐&#xff0c;64位没做完的做完&#xff0c;32位重新都做一遍&#xff0c;课上指定2字节对齐的做一遍&#xff0c;自己验证&#xff08;已完成&#xff09;两种验证大小端对齐的代码写一遍复习指针内容&#xff08;已完…

如何通过本地消息表实现分布式事务?

本地消息表步骤 通过本地消息表&#xff08;也称为可靠消息表&#xff09;实现分布式事务是一种常见的做法&#xff0c;用于保证在分布式环境中消息的可靠传递和事务的一致性。以下是使用本地消息表实现分布式事务的一般步骤&#xff1a; 消息生产方&#xff08;也就是发起方&…