C++ primer笔记

1 类 p229

类的基本思想是 数据抽象封装

数据抽象:是依赖于接口和实现分离的编程技术。

类的实现包括 类的数据成员、负责接口实现的函数、定义类所需的各种私有函数。

2 引入this

成员函数通过this的额外隐式函数访问调用它的那个对象,this形参是隐式定义的,因为this总是指向调用它的对象,因此this是一个常量指针,不允许改变this中保存的地址。

默认情况下this的类型是指向类型非常量版本的常量指针。通过引入const,即在成员函数参数列表后紧跟const,string isbn() const{return bookNo};可修改隐式this指针的类型。此时表示this是一个指向常量的指针。这样使用const的成员函数成为常量成员函数。

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

3 定义IO类 p234

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

cpp 复制代码
// 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的。

相关推荐
Bear on Toilet18 小时前
继承类模板:函数未在模板定义上下文中声明,只能通过实例化上下文中参数相关的查找找到
开发语言·javascript·c++·算法·继承
努力努力再努力wz19 小时前
【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)
java·linux·运维·开发语言·c++
lingran__1 天前
速通ACM省铜第三天 赋源码(Double Perspective和Trip Shopping和Hamiiid, Haaamid... Hamid?)
c++·算法
凤城老人1 天前
C++使用拉玛努金公式计算π的值
开发语言·c++·算法
YaoYuan93231 天前
C++ 类型推导(第一部分)
c++
夜猫逐梦1 天前
【VC】 error MSB8041: 此项目需要 MFC 库
c++·mfc
姓刘的哦1 天前
Qt中的QWebEngineView
数据库·c++·qt
C_player_0011 天前
——贪心算法——
c++·算法·贪心算法
SundayBear1 天前
QT零基础入门教程
c++·qt
kyle~1 天前
排序---插入排序(Insertion Sort)
c语言·数据结构·c++·算法·排序算法