C++ primer笔记

发布于:2024-05-04 ⋅ 阅读:(29) ⋅ 点赞:(0)

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的。


网站公告

今日签到

点亮在社区的每一天
去签到