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

C++详细笔记(五)

1.类和对象

1.1运算符重载(补)

1.运算符重载中,参数顺序和操作数顺序是一致的。

2.一般成员函数重载为成员函数,输入流和输出流重载为全局函数。

3.由1和2只正常的成员函数默认第一个参数为this指针而重载中参数顺序和操作数顺序要一致,则导致使用时为d<<cout;(不符合使用习惯正常为:cout<<d<<endl).

void Date::operator<<(ostream& out)
{return out << _year << "年" << _month << "月" << _day << "日" << endl;
}
//全局声明
ostream& operator(ostream& out ,const Date d);
istream& operator(istream& in, Date d);

1.2友元函数

        在 C++ 中,友元函数是一种特殊的函数。它可以访问类的私有成员和保护成员,尽管它不是该类的成员函数。

一、友元函数的作用

友元函数的主要作用是在不破坏类的封装性的前提下,允许特定的函数访问类的私有成员。这在某些情况下非常有用,例如:

  1. 提高程序的效率:如果某些操作需要频繁访问类的私有成员,使用友元函数可以避免通过成员函数的接口进行访问,从而提高程序的执行效率。
  2. 实现特定的功能:在某些情况下,需要在类的外部实现一些与类相关的功能,而这些功能需要访问类的私有成员。友元函数可以提供一种方便的方式来实现这些功能。

二、友元函数的声明和定义

1.声明友元函数:在类的内部,可以使用 friend 关键字声明友元函数

class MyClass {
private:int privateData;
public:MyClass(int data) : privateData(data) {}friend void friendFunction(MyClass& obj);
};

2.定义友元函数:友元函数的定义可以在类的外部进行,就像普通函数一样。

void friendFunction(MyClass& obj) {std::cout << "Private data: " << obj.privateData << std::endl;
}
friend ostream& operator(ostream& out, const Date d);
friend istream& operator(istream& in, Date d);
//Date类中private私有化导致类外不能访问这时候可以使用友元函数来进行访问。

三、友元函数的注意事项

  1. 友元关系是单向的:如果函数 A 是类 B 的友元函数,那么函数 A 可以访问类 B 的私有成员,但类 B 不能访问函数 A 的私有成员。
  2. 友元关系不能传递:如果函数 A 是类 B 的友元函数,函数 B 是类 C 的友元函数,那么函数 A 不能直接访问类 C 的私有成员。
  3. 友元函数可能破坏类的封装性:使用友元函数时,需要谨慎考虑,确保不会破坏类的封装性。如果过多地使用友元函数,可能会导致类的内部实现细节暴露给外部,从而降低程序的可维护性和可扩展性。

1.3const成员函数

一、const 成员函数的作用

  1. 保证对象的状态不被修改:通过使用 const 成员函数,可以向编译器保证该函数不会修改对象的状态。这对于那些只需要读取对象数据而不需要修改对象的操作非常有用。
  2. 允许 const 对象调用成员函数:如果一个对象被声明为 const,那么只能调用该对象的 const 成员函数。这是因为非 const 成员函数可能会修改对象的状态,而 const 对象不允许被修改。

二、const 成员函数的声明和定义

1.声明 const 成员函数:在成员函数的声明后面加上 const 关键字,表示该函数是 const 成员函数。

void Date::Print()const
{cout << _year << "_" << _month << "_" << _day << endl;
}
//不是成员函数都可以const

1.4初始化列表

        在 C++ 中,初始化列表是一种用于初始化类成员变量的语法结构。它通常在构造函数的参数列表之后,函数体之前使用。

一、初始化列表的作用

  1. 更高效的初始化:对于一些没有默认构造函数的成员变量或者需要特定参数进行初始化的成员变量,使用初始化列表可以直接调用其合适的构造函数进行初始化,避免了先使用默认构造函数初始化再赋值的过程,从而提高了程序的效率。
  2. 常量成员变量的初始化:对于常量成员变量,只能通过初始化列表进行初始化,因为常量在初始化后不能被修改。
  3. 引用成员变量的初始化:引用成员变量也必须在初始化列表中进行初始化,因为引用在声明时必须被初始化。
class ClassName 
{MuQueue(int n = 20):_pushst(n),_popst(n),_size(0),_x=1;
};private:
stack _Pushst;
stack _Popst;
int _size;
const int _x;//成员变量的初始化顺序是声明的次序和初始化中的无关。
//实践中最好使用初始化列表。

相关文章:

C++详细笔记(五)

1.类和对象 1.1运算符重载&#xff08;补&#xff09; 1.运算符重载中&#xff0c;参数顺序和操作数顺序是一致的。 2.一般成员函数重载为成员函数&#xff0c;输入流和输出流重载为全局函数。 3.由1和2只正常的成员函数默认第一个参数为this指针而重载中参数顺序和操作数顺…...

简易CPU设计入门:译码模块(一)

项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff…...

力扣题目解析--三数之和

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示…...

qt QTabWidget详解

1、概述 QTabWidget是Qt框架中的一个控件&#xff0c;它提供了一个标签页式的界面&#xff0c;允许用户在不同的页面&#xff08;或称为标签&#xff09;之间切换。每个页面都可以包含不同的内容&#xff0c;如文本、图像、按钮或其他小部件。QTabWidget非常适合用于创建具有多…...

linux shell脚本学习(1):shell脚本基本概念与操作

1.什么是shell脚本 linux系统中&#xff0c;shell脚本或称之为bash shell程序&#xff0c;通常是由vim编辑&#xff0c;由linux命令、bash shell指令、逻辑控制语句、注释信息组成的可执行文件 *linux中常以.sh后缀作为shell脚本的后缀。linux系统中文件乃至脚本的后缀并没有…...

Savitzky-Golay(SG)滤波器

Savitzky-Golay&#xff08;SG&#xff09;滤波器是一种在时域内基于局域多项式最小二乘法拟合的滤波方法&#xff0c;它最初由Savitzky A和Golay M于1964年提出&#xff0c;并广泛应用于数据流平滑除噪。 基本介绍 一、基本原理 SG滤波器通过在滑动窗口内拟合多项式来平滑数…...

Webserver(2.7)共享内存

目录 共享内存共享内存实现进程通信 共享内存 共享内存比内存映射效率更高&#xff0c;因为内存映射关联了一个文件 共享内存实现进程通信 write.c #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <string.h>int main(){…...

【网安案例学习】凭证填充Credential Stuffing

### 凭证填充的深入讨论 凭证填充&#xff08;Credential Stuffing&#xff09;是一种网络攻击技术&#xff0c;攻击者利用从数据泄露中获取的大量用户名和密码组合&#xff0c;尝试在其他网站和服务上进行自动化登录。这种攻击依赖于用户在多个网站上重复使用相同密码的习惯。…...

网站建设公司怎么选?网站制作公司怎么选才不会出错?

寻找适合靠谱的网站设计公司&#xff0c;不要盲目选广告推最多的几家&#xff0c;毕竟要实现自身品牌营销&#xff0c;还是需要多方面考量。以下几个方面可以作为选择的参考&#xff1a; 1. 专业能力如何&#xff1f; 一个公司的专业能力&#xff0c;决定了最后网站设计的成果…...

19. 架构重要需求

文章目录 第19章 架构重要需求19.1 从需求文档中收集架构重要需求&#xff08;ASRs&#xff09;不要抱太大希望从需求文档中找出架构重要需求 19.2 通过访谈利益相关者收集架构重要需求19.3 通过理解业务目标收集架构重要需求19.4 在效用树中捕获架构重要需求19.5 变化总会发生…...

iOS 再谈KVC、 KVO

故事背景&#xff1a;大厂面试&#xff0c;又问道了基本的kvc kvo的原理和使用&#xff0c;由于转了前端&#xff0c;除了个setter和getter&#xff0c;我全忘记了&#xff0c;其实还是没有理解记忆&#xff0c;下面再看一下kvc 和kvo ,总结一个让人通过理解而无法忘记的方法&a…...

java、excel表格合并、指定单元格查找、合并文件夹

#创作灵感# 公司需求 记录工作内容 后端&#xff1a;JAVA、Solon、easyExcel、FastJson2 前端&#xff1a;vue2.js、js、HTML 模式1&#xff1a;合并文件夹 * 现有很多文件夹 想合并全部全部的文件夹的文件到一个文件夹内 * 每个部门发布的表格 合并全部的表格为方便操作 模…...

最基础版编译运行Java(纯小白)

流程图&#xff1a; ⚠ 需要先安装JDK (Java Development Kit) 1. 写文件 首先写好自己的“文件”&#xff0c;可以用Sublime Text等文本编辑器写&#xff0c;还可以直接新建文本文档写一个.txt文件。 以编写一个HelloWorld程序为例&#xff1a; public class HelloWorld{p…...

六西格玛项目助力,手术机器人零部件国产化稳中求胜——张驰咨询

项目背景 XR-1000型腔镜手术机器人是某头部手术机器人企业推出的高端手术设备&#xff0c;专注于微创手术领域&#xff0c;具有高度的精确性和稳定性。而XR-1000型机器人使用的部分核心零部件长期依赖进口&#xff0c;特别是高精度电机、关节执行机构和视觉系统等&#xff0c;…...

Python爬虫系列(一)

目录 一、urllib 1.1 初体验 1.2 使用urllib下载网页、图片、视频等 1.3 反爬介绍 1.4 请求对象定制 1.5 get请求的quote方法 1.6 多个参数转成ascii编码 1.7 post请求 1.8 综合案例演示 一、urllib 1.1 初体验 # urllib是python默认带的&#xff0c;无需额外下载 i…...

# vim那些事...... vim删除文件全部内容

vim那些事… vim删除文件全部内容 1、在 Vim 中删除整个文件的内容&#xff0c;可以使用以下命令&#xff1a; 1&#xff09;打开 Vim&#xff0c;并编辑你想要清空的文件。 2&#xff09;按 Esc 确保你不在插入模式&#xff0c;而在命令模式。 3&#xff09;输入 gg 跳转到…...

Selinux及防火墙

一&#xff0c;selinux简介&#xff1a; SELinux&#xff08;Security-Enhanced Linux&#xff09;是一个Linux内核安全模块&#xff0c;旨在提供强制访问控制&#xff08;MAC&#xff09;机制&#xff0c;以增强系统的安全性。由美国国家安全局&#xff08;NSA&#xff09;开…...

业绩代码查询实战——php

一、一级代码显示职员 foreach($data_职员信息 as $key > $value){//$where_查询分类$where_查询通用;//$dat分类one $业绩提成->where($where_查询分类)->order("CreateDate desc")->select();if($value[haschildname]0 && $value[key] !"…...

内网穿透技术选型PPTP(点对点隧道协议)和 FRP(Fast Reverse Proxy)

PPTP&#xff08;点对点隧道协议&#xff09;和 FRP&#xff08;Fast Reverse Proxy&#xff09;是两种实现内网穿透的技术&#xff0c;但它们的工作原理、使用场景和特点有很大区别。以下是它们的详细比较&#xff1a; PPTP&#xff08;Point-to-Point Tunneling Protocol&am…...

信号与噪声分析——第三节:随机过程的统计特征

随机过程的定义&#xff1a; 随机过程是一种数学模型&#xff0c;用来描述系统或现象在时间或者空间上随之变化的不确定性。 一个随机过程的数字特征 1.数学期望&#xff08;统计平均值&#xff09;&#xff1a; 表示为 数学期望是随机过程在时间 t 上的平均值&#xff0c;通常…...

【AI黑话日日新】什么是采样温度?

摘要 在大语言模型自回归文本生成链路中,采样温度是调控输出随机性、逻辑性与创造力的核心超参数。它依托玻尔兹曼分布思想缩放模型原始Logits向量,重塑Token概率分布形态,直接决定推理阶段的内容风格。本文从数学本质、分布映射、分层效果、关联采样策略、代码实战及业务调…...

如何用League-Toolkit提升30%游戏决策效率?完整指南

如何用League-Toolkit提升30%游戏决策效率&#xff1f;完整指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 价值定位&#xf…...

Flutter Gradle插件迁移指南:从apply script到声明式plugins的实践

1. 为什么需要迁移到声明式plugins块 最近在维护一个Flutter项目时&#xff0c;我发现每次构建Android端都会弹出一个黄色警告&#xff1a;"You are applying Flutters app_plugin_loader Gradle plugin imperatively using the apply script method..."。这个警告看…...

Waveforms实战指南:基于React的交互式波形可视化深度解析

Waveforms实战指南&#xff1a;基于React的交互式波形可视化深度解析 【免费下载链接】waveforms An interactive, explorable explanation about the peculiar magic of sound waves. 项目地址: https://gitcode.com/gh_mirrors/wa/waveforms 在音频处理、信号分析和数…...

ccmusic-database从零开始:基于ccmusic-database微调新增流派(如国风/电子)

ccmusic-database从零开始&#xff1a;基于ccmusic-database微调新增流派&#xff08;如国风/电子&#xff09; 1. 项目介绍与背景 音乐流派分类是音频分析领域的重要应用&#xff0c;ccmusic-database项目基于深度学习技术&#xff0c;能够自动识别音频文件的音乐流派。这个…...

用Python和MATLAB/Simulink复现车辆二自由度模型:从理论公式到仿真验证(附代码)

从理论到实践&#xff1a;Python与MATLAB/Simulink实现车辆二自由度动力学仿真 在自动驾驶和车辆工程领域&#xff0c;理解车辆动力学模型是开发先进控制算法的基础。二自由度模型作为最简单的车辆动力学模型之一&#xff0c;能够有效描述车辆的侧向和横摆运动特性。本文将带您…...

Alt App Installer:打破微软商店限制的Windows应用自由安装方案

Alt App Installer&#xff1a;打破微软商店限制的Windows应用自由安装方案 【免费下载链接】alt-app-installer A Program To Download And Install Microsoft Store Apps Without Store 项目地址: https://gitcode.com/gh_mirrors/alt/alt-app-installer 你是否曾经因…...

技术竞赛之道:从创新构想到落地执行的实战心法

技术竞赛之道&#xff1a;从创新构想到落地执行的实战心法 【免费下载链接】A-to-Z-Resources-for-Students ✅ Curated list of resources for college students 项目地址: https://gitcode.com/GitHub_Trending/at/A-to-Z-Resources-for-Students 在当今技术驱动的时…...

终极指南:如何用Ice轻松管理你的Mac菜单栏,打造清爽高效的工作空间

终极指南&#xff1a;如何用Ice轻松管理你的Mac菜单栏&#xff0c;打造清爽高效的工作空间 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 还在为杂乱的macOS菜单栏烦恼吗&#xff1f;Ice是一款专为…...

AI Agent驱动业务规则测试:从复杂逻辑到精准用例的自动化实践

1. AI Agent如何重塑业务规则测试 第一次接触AI Agent驱动的测试用例生成时&#xff0c;我正被一个保险理赔系统的测试工作折磨得焦头烂额。那套系统里有上百条复杂的业务规则&#xff0c;光是理解"投保人年龄超过60岁且保单满5年但未达10年时&#xff0c;赔付比例调整为8…...