C++ primer笔记

devtools/2024/10/20 20:14:25/

1 类 p229

类的基本思想是 数据抽象封装
数据抽象:是依赖于接口和实现分离的编程技术。
类的实现包括 类的数据成员、负责接口实现的函数、定义类所需的各种私有函数。

2 引入this

成员函数通过this的额外隐式函数访问调用它的那个对象,this形参是隐式定义的,因为this总是指向调用它的对象,因此this是一个常量指针,不允许改变this中保存的地址。
默认情况下this的类型是指向类型非常量版本的常量指针。通过引入const,即在成员函数参数列表后紧跟const,string isbn() const{return bookNo};可修改隐式this指针的类型。此时表示this是一个指向常量的指针。这样使用const的成员函数成为常量成员函数。

因为常量对象、常量对象的引用或指针都只能调用常量成员函数,因此若不引入const,会导致this不能绑定到常量对象上,就不能在常量对象上调用普通的成员函数。

3 定义IO类 p234

IO类不能被拷贝,只能通过引用来传递它们。

// istream和ostream传入的第一个参数为普通引用,因为在输入输出过程,流在不断变化,因此不能常量引用。
istream &read(istream &s,Sales &item){int price = 0;is >> item.bookNo >> item.nums >> price;item.revenue = preice * items.nums;return is;
}
ostream &print(ostream &os,const Sales &item){os << item.isbn() << item.revenue;return os;
}

4 构造函数 p235

①构造函数任务是初始化类对象的数据成员,无论何时只要类对象被创建,就会执行构造函数。
②构造函数不能声明成const的,当创建类的一个const对象时,直到构造函数完成初始化过程,对象才能真正取得常量属性。
③只有当类没有声明任何构造函数,编译器才会自动生成默认构造函数(称为合成的默认构造函数).

某些类不能依赖于合成的默认构造函数:原因:
① 在没有任何构造函数情况编译器才会自动生成默认构造函数,一旦定义了一个其他构造函数,就必须定义默认构造函数,否则将不会自动生成默认构造函数。
②对于某些类,合成默认构造函数可能会有错误操作,若定义在块中的内置类型或复合类型(指针/数组),则它们的值是未定义的。除非对它们进行手动初始化。
③编译器有时不能为某些类合成默认构造函数,如类中包含其他类类型的成员,且这个成员的类型没有默认构造函数,编译器就无法初始化该成员,此时必须自定义默认构造函数。

5 访问控制与封装

访问说明符:
①public:成员整个程序可被访问,定义类的接口。
②private:成员可以被类的成员函数访问,但不能被使用该类的代码访问,其封装了类的实现细节。
一个类可以包含0或多个访问说明符。

5.1 class和struct区别 p241

两者的默认访问权限不同:对struct,定义在第一个访问说明符之前的成员是public,而使用class时,这些成员是private的。


http://www.ppmy.cn/devtools/36651.html

相关文章

5.6代码

1.最大公约数 这个题最重要的是要找到一个区间是1&#xff0c;找到之后就可以直接加次数就可以了 #include <bits/stdc.h>using namespace std;main() {long long n,i,j,a0,b,ans99999;cin>>n;long long s[n],dp[n][n];for(i0;i<n;i){cin>>s[i];if(s[i]1…

鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】

概述 本文将介绍如何快速搭建基于OpenHarmony标准系统&#xff08;Hi3516DV300开发板&#xff09;的应用开发环境&#xff0c;并基于一个时钟APP示例逐步展示应用的创建、开发、调试和安装等流程。示例代码可以通过本链接获取。 时钟App是一款显示实时时间的应用&#xff0c;…

用PyTorch实现卷积神经网络解决FashionMNIST分类挑战

其他项目(购买专栏任意项目一对一指导) 基于yolov8+LPRNet的车牌识别项目用PyTorch解决FashionMNIST分类挑战cnn FashionMNIST分类 前言一、FashionMNIST:从手写数字到时尚元素二、构建卷积神经网络三、超参数选择与优化方式四、训练结果总结与不足前言 在当前的机器学习领…

Rust 文档注释:文件注释//!和函数、结构体注释///

在 Rust 中&#xff0c;通常会在源代码文件的开头使用注释来提供有关文件、模块、版本、作者和其他相关信息的说明。这些信息可以帮助其他开发者更好地理解代码的背景和上下文。 以下是一个示例&#xff0c;展示了如何在 Rust 源代码文件的开头添加标题、版本、作者等信息&…

【MySQL】MySQL 8.4.0 长期支持版(LTS)安装

就在2024年 “5.1” 节前&#xff0c;MySQL官方发布了8.4.0长期支持版&#xff08;LTS - Long Term Support&#xff09;。根据官方提供的文档&#xff0c;在本地虚拟机进行安装测试。 安装、配置和启动过程记录如下&#xff1a; 第一步&#xff0c;上传到安装包&#xff08;my…

js浏览器请求,post请求中的参数形式和form-data提交数据时数据格式问题(2024-05-06)

浏览器几种常见的post请求方式 Content-Type 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认表单数据会编码为 "application/x-www-form-urlencoded" post请求的参数一般放在Body里。 Content-Type&#xff08;内容类型&#xff09;&#xff0c;一般…

大数据毕业设计Python+Django旅游景点评论数据采集分析可视化系统 NLP情感分析 LDA主题分析 bayes分类 旅游爬虫 旅游景点评论爬虫 机器学习 深度学习 人工智能 计算机毕业设计

毕业论文&#xff08;设计&#xff09;开题报告 学生姓名 学 号 所在学院 信息工程学院 专 业 指导教师姓名 指导教师职称 工程师 助教 指导教师单位 论文&#xff08;设计&#xff09;题目 基于朴素贝叶斯算法旅游景点线上评价情感分析 开 题 报 告…

leetcode刷题:884、977

884.比较含退格的字符串 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 方法一、用栈 #include <i…