C++学习总结(二 )

211本硕电子研二自学C++计划上半年找到大厂实习,C++学习怎么规划才最有效? 目标:大厂实习 + 秋招Offer路径:系统化学习路线 → 深度项目实战 → 八股/算法强化│├─ 3个月冲刺:C++核心 + Linux编程 + 1个中级项目│└─ 6个月深耕:分布式系统项目 + 开源贡献 + 面试模拟如果是你,你会如何规划学习?欢迎在评论区分享你的看法!计算机相关专业就业求职学习路线/offer选择/职业规划建议关注公众号程序员yt学习就业困惑?我们来为你答疑解惑!)免费投稿 投稿必回​​。 阅读详情

操作符重载

在上总结(一)中,C u r r e n c y类包含了几个与C + +标准操作符相类似的成员函数,例如, A d d进行+操作,I n c r e m e n t进行+ =操作。直接使用这些标准的C + +操作符比另外定义新的函数(如A d d,I n c r e m e n t)要自然得多。可以借助于操作符重载( operator overloading)的过程来使用+和+ =。操作符重载允许扩充现有C + +操作符的功能,以便把它们直接应用到新的数据类型或类。

在C u r r e n c y类中重载了流插入操作符,但没有定义相应的成员函数,而重载+和+ =时则把它们定义为类成员。同样,也可以重载流抽取操作符> >而不需要把它定义为类成员。

由于C u r r e n c y对象的p r i v a t e成员对于非类成员函数来说不可访问(被重载的< <不是类成员,而+是),所以,重载< <的代码不能引用对象x的私有成员
(在< <操作中x将被插入到输出流中)。

使用操作符重载的类定义:

class Currency {
p u b l i c :
// 构造函数
Currency(sign s = plus, unsigned long d = 0, unsigned int c = 0);
// 析构函数
~Currency() {}
bool Set(sign s, unsigned long d, unsigned int c);
bool Set(float a);
sign Sign() const
{if (amount < 0) return minus;
else return plus;}
unsigned long Dollars() const
{if (amount < 0) return (-amount) / 100;
else return amount / 100;}
unsigned int Cents() const
{if (amount < 0)
return -amount - Dollars() * 100;
else return amount - Dollars() * 100;}
Currency operator+(const Currency& x) const;
Currency& operator+=(const Currency& x)
{amount += x.amount; return *this;}
void Output(ostream& out) const;
p r i v a t e :
long amount;
} ;


+,O u t p u t和< <的代码

Currency Currency::operator+(const Currency& x) const

{// 把x 累加至* t h i s .Currency y;y.amount = amount + x.amount;return y;}

void Currency::Output(ostream& out) const{// 将currency 的值插入到输出流long a = amount;if (a < 0) {out << '-' ; a = -a ; }

long d = a / 100; // 美元out << '<< d << '.' ; 

int c = a - d * 100; // 美分 if (c < 10) out << "0"; out << c; } // 重载< <


ostream& operator<<(ostream& out, const Currency& x)

{x.Output(out); return out;}

 

引发异常

构造函数和set函数这样的类成员在执行预定的任务时有可能会失败。在构造函数中处理错误条件的方法是退出程序,而在S e t中则返回一个失败信号( f a l s e)给调用者。

为了引发
异常,必须首先定义一个异常类,比如BadInitialization .

// 初始化失败
class BadInitializers {
p u b l i c :
BadInitializers() {}
} ;

调用方式如下:

void Currency::Set(sign s, unsigned long d, unsigned int c)
{// 取值
if (c > 99) throw BadInitializers();
amount = d * 100 + c;
if (s == minus) amount = -amount;
}


友元和保护类成员
 

一个类的private成员仅对于类的成员函数是可见的。在有些应用中,必须把对这些private成员的访问权授予其他的类和函数,做法是把这些类和函数定义为友元(friend)。

在Currency类中定义了一个成员函数O u t p u t以便于对操作符<<的重载。定义这个函数是必要的,因为如下函数:

ostream& operator <<(ostream& out, const Currency& x)

不能访问p r i v a t e成员a m o u n t。我们可以把ostream& operator<<描述为C u r r e n c y类的友元,从而避免定义附加的函数,这样就把Currency所有成员(包括p r i v a t e成员及p u b l i c成员)的访问权都授予了该函数。

为了产生友元,需要在C u r r e n c y类描述中引入friend 语句。如下所示:

class Currency {
friend ostream& operator<< (ostream&, const Currency&);
p u b l i c :
// 重载< <
ostream& operator<<(ostream& out, const Currency& x)
{// 把currency 的值插入到输出流
long a = x.amount;
if (a < 0) {out << '-' ; a = -a;}
long d = a / 100; // 美元
out << '<< d << '.' ; int c = a - d * 100; // 美分 if (c < 10) out << "0"; out << c; return out; }




派生类:派生类需要访问基类的部分或所有数据成员,可以使用保护类型的数据。保护类成员类似于私有成员,区别在于派生类可以访问保护类成员。

数据成员应尽量保持为p r i v a t e成员。通过增加保护类成员来访问和修改数据成员的值,派生类可以间接访问基类的数据成员。同时,可以修改基类的实现细节而不会影响派生类。

 #ifndef, #define和# e n d i f语句

在文件头,必须放上如下语句:
#ifndef Currency_
#define Currency_
而在文件尾需要放上语句:
# endif
这些语句确保Currencyy的代码仅被程序包含(Include)和编译一次.

MTK 人工智能生态系统 <一> 简介 Neuropilot 阅读详情

相关推荐

计算机网络实验六 RIP 配置实验

Man! What can I say?

AClerk的博客 1592

c++实现currency类(两种)

**currency类**c++实现一个currency类——简要说明代码 c++实现一个currency类——简要说明 练习来自[美]萨特吉·萨尼(Sartaj Sahni)写的c++语言描述——数据结构、算法与应用中第一章c++回顾知识 其中区别开了两个currency类,复制粘贴可得到旧currency类,对/**/进行删除后可以使用新的currency类,并有附加函数操作 这是一个菜鸟的练...

qq_43600632的博客 1460

《UE4游戏开发》之 《查cook资源失败,问题记录》

当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。 下面就材质cook出错,增加一些日志,方便查找问题做简单记录 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMat.

qq_21919621的博客 2580

复习(数据结构):动态数组:c++_常规写法

1. 异常类 //内存异常 //内存异常 #include class BadInitializers { public: BadInitializers() {} }; // insufficient memory class NoMem { public: NoMem() {} }; //new引发Nomen的异常,而不是xalloc void my

LandscapeMi 456

什么是Claude 的 Agent Skills?

摘要: Claude的Agent Skills功能支持通过结构化技能包(含指令、脚本、工具)实现任务自动化,如数据分析、文档生成等。核心能力包括:1)技能包管理(如Python脚本+模板);2)工具调用(API/数据库交互);3)子代理协作(拆分复杂任务)。快速上手步骤:创建技能包(如Excel报表生成)、配置工具权限、触发执行;支持多代理并行处理(如SQL查询+可视化)。关键技巧:工具需明确定义参数、利用子代理共享上下文、注重权限管控。官方文档与社区资源提供进阶指导,使Claude成为可编程的数字助手。

jobleap.cn求职助手首页 1729

FreeRTOS CLI实战:5分钟搞定GD32串口终端移植(附LED控制源码)

本文详细介绍了如何在GD32芯片上快速移植FreeRTOS CLI(Command Line Interface)终端,实现串口交互式调试。通过DMA+空闲中断配置和LED控制命令实战,开发者可在5分钟内构建高效嵌入式调试工具,显著提升现场维护效率。

weixin_28707365的博客 450

C++中异常类的使用方法

C++有很多的标准异常类:namespace std{    //exception派生    class logic_error; //逻辑错误,在程序运行前可以检测出来     //logic_error派生    class domain_error; //违反了前置条件    class invalid_argument; //指出函数的一个无效参数

viclee 3万+

告别“盲开”:手把手教你用MCU内置比较器搞定BLDC无感方波启动(附代码片段)

本文详细介绍了如何利用MCU内置比较器实现BLDC无感方波启动,解决传统无传感器控制中的'盲开'问题。通过虚拟中性点电路设计和三段式启动流程,结合反电动势检测和过零检测技术,提供了一套经济高效的解决方案,并附有可直接移植的代码片段,助力工程师快速实现可靠的无感控制。

weixin_33694172的博客 502

数据结构、算法与应用--类

curr1.h #ifndef Currency_ #define Currency_ #include #include using namespace std; enum sign {plus, minus}; class Currency { public: // constructor Currency(sign s = plus, uns

yaoming168的专栏 634

两级运算放大器设计与仿真

运算放大器(简称运放)是许多模拟系统和混合信号系统中的一个完整部分。各种不同复杂程度的运放被用来实现各种功能:从直流偏置的产生到高速放大或滤波。伴随者每一代 CMOS 工艺,由于电源电压和晶体管沟道长度的减小,为运放的设计不断提出复杂的课题。 运算放大器的设计可以分为两个较为独立的步骤,第一步是选择或搭建运放的基本结构,绘出电路结构草图,第二步就要选择直流电流,手工设计管子尺寸,以及设计补偿电路等等,然后在手工计算的基础上,运用模拟电路仿真软件对设计的两级运放进行仿真,并对电路进行后续的调试和修改。....

qq_50968231的博客 11万+

从SOMEIP看SOA,汽车电子电器架构的转变

从SOMEIP看SOA,汽车电子电器架构的转变

天赐好车的博客 241

【C++】cpp学习笔记二(存储类,引用,类&对象,重载)

C++ 存储类 存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: auto :声明变量时根据初始化表达式自动推断该变量的类型,函数返回值 register :用于定义存储在寄存器中而不是 RAM 中的局部变量。 static :指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁 extern :用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。 mutab

yusihe的博客 905

【DRAM存储器五十四】LPDDR5介绍--PHY简介和LPDDR5训练流程

简述LPDDR5 PHY的基本功能和训练流程简介

highman110的博客 905

C++学习之路二:C++

文章目录一、C++ Object(对象和类)1. 面向对象编程OOP简介2. 抽象2.1 抽象和类3.友元 friend4.继承4.1 派生类构造函数4.2 派生类和基类的关系 -> is-a关系4.3 继承的关系5. 多态二、C++ 异常安全1.不泄漏资源1.1 RAII技术 Resource Acquisition Is Initialization1.2 shared_ptr() 智能...

柠檬草的味道 1983

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++基础学习二

这里vince将要进入C++的学习了,C++学习将是一个漫长的过程,当然在学习这里的基础上前面的知识也不能不复习。也有很多人说C++有多难有多难的,但是我们不能胆怯,努力去学,孰能生巧,至少能够达到了解它的层次哈~ 我们可能有很多人是学完C语言就去学数据结构的哈!当时很多课程或者书籍,(例如:严蔚敏老师的书)大家刚接触顺序表和链表的时候,就会遇到当时看到的时候肯定都很懵逼吧~ 小白:满脸疑惑,这怎么在形参和类型之间加个“取地址”操作符呢?这是干嘛的呢?这是到底是什么意思啊? 我:这里的不再是C语言里面学的“

forever的博客 656

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C++学习二

C++的历史发展 带类的C,1983正式取名C++,2011年发布第三版C++标准C++11,包含核心语言的新机能、扩展C++标准程序库。2014年公布C++14。 C++的特点 兼容C,支持面向过程的程序设计,支持,面向对象的方法,支持泛型程序设计方法。 命名空间 避免命名冲突。 std是C++标准库的命名空间(namespace)名。 using namespa...

xhluojinji的博客 958

【TARS】TARS-CPP客户端学习二

1.线程情况

Edidaughter的博客 1530

cpp学习笔记(二)

cpp学习笔记二作为一个cpp的初学者,我一直在语法的泥潭里面挣扎。 我想不要太在意那些语法细节,不对语法做深刻的思考和总结,快速的对cpp的语法有一个大致的了解对应的章节10 类和对象 11 实现继承 12 多态 13 运算符类型和运算符重载 14 类型转换运算符 15 宏和模板 第10章什么是类和对象 如何定义新类并创建其对象 什么是成员函数和成员数据 什么是构造函数?如何使用它们 第11章什

逐梦如风-毕康 803

cpp学习笔记(二)

iostream中的cout使用 cout是标准输出对应的命名空间是stdout,所以在使用时要遵守命名空间的三种使用方法。在上篇中有记录。 这是cout的最简单的使用例子,iostream是头文件,std是空间名称。在使用时cout可以理解为屏幕,"<<"符号是运算符重载,在意义与形体上都有向屏幕输出的意思,最后的endl可以看做是\r\n。 #include <iostrea...

weixin_43310105的博客 262

神经网络与深度学习(二)cpp-c++BP神经网络

读到作者用JAVA实现的神经网络解决异或等问题 以下为c++实现版本 接口略有不同 具体关键的更新的证明详见机器学习或大牛博客 有一个关键的地方是 权值的初始化 原本是都初始化0 但是楼主也意识到 这样无论怎样更新 隐层不同神经元对应输入层同一神经元的权值都相同 相当于 仍然用一个线性函数划分 不可线性划分的区域 思考良久就初始化为随机数了 然而不行 后来看了别人的初始化 发现了这个

Mr_W1997的博客 1341

C++学习(二)

cout.setf()是C++用来保证输出位数的,它可以将,保留有效位数覆盖,从而输出6位小数,当然也可以直接用printf输出,但是我们还是来看看吧!我们是在学习过了C语言,基础上来看这篇文章的,如果你是直接学C++,这篇文章不太适合你的,因为这里只讲C++基础中与C语言不同之处。在C语言中如果我们想输出几位小数可以直接.3%f,那么在C++中cout如何来保证想要输出的位数呢?注意:wchar_t的输入输出流也要改变,cin变成了wcin,cout变成了wcout。

2301_79813267的博客 1371

二、C++学习笔记——开始学习C++

二、开始学习C++ 2.1 进入C++ 2.1.1 main()函数 2.1.2 C++注释 2.1.3 C++预处理器和iostream

weixin_45528232的博客 286

c++入门学习②

上篇文章介绍了c++的一些基本内容,这一篇会接着上文讲解c++的入门内容注:c++循环、数组、指针和c语言的一样,这篇文章就先不做讲解的(●'◡'●)c++入门学习(一)-优快云博客依照不同的数据类型定义不同变量,赋值即可。o(* ̄▽ ̄*)ブ下期预告:⭐c++类和对象。

2301_79328557的博客 1233

【C++学习二】C++继承

文章目录初识C++之 继承1. 继承访问权限测试(类内部成员的权限)2.继承访问权限测试(继承的权限)使用using提升成员权限3.C++友元3.1 友元函数3.2 友元类友元类继承测试(友元的作用域)总结 初识C++之 继承 c++作为一门OO语言,怎么能少得了继承?在面向对象语言当中,继承允许我们依据一个类来定义另一个类。继承的特性在于,新的类默认含有继承类的一些属性与方法。这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 当创建一个类时,我们不再需要重新编写新

Yann的博客 505
上一篇: C++学习总结(一)
下一篇: C++程序性能总结
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值