1.第7章
1.定义在类内部的方式是隐式的inline函数。
2.在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。this -> bookNo
3.this指针不能指向一个常量成员,这是因为this指针是一个常量指针(顶层const),这意味着它只能指向对象的地址而可以通过它改变对象的值,而将一个常量传给它,会出现修改对象的值的风险。
4.左值可以当成右值使用,实际使用的是它的内容(值)。但是右值不能当成左值。
5.返回引用的函数的到左值,其他返回类型得到右值,如果返回的是一个数组下标、对象,要返回引用。如果返回的是一个取地址符,不要返回引用。
6.只要类的对象被创建,就会执行构造函数,如果对象没有初始值会使用默认构造函数为其进行默认初始化。
7.如果不需要改变默认构造函数的话,并且有多个构造函数,这个时候可以用=default
Sales_data() = default;
8.class和struct关键字都可以定义类,唯一的区别是,struct和class的默认访问权限不太一样。
如果我们希望定义的类所有成员是public的,使用struct定义类,这是因为struct默认成员都为public类型;而class默认成员都为private类型。
这是它们两种方式定义类唯一的区别。
9.可变数据成员mutable
有时我们希望能修改类的某个数据成员,即使是在一个const成员函数内,可以通过在变量的声明中加入mutable关键字做到这一点。
mutable size_t access_ctr;//即使在一个const对象内也能被修改
10.当我们提供一个类内初始值时,必须以符号=或者花括号表示。
2.第8章
1.类型ifstream和istringstram都继承自istream。
2.Exercise 8.1
#include <iostream>
#include<string>
using namespace std;
istream & in(istream & a)
{
string buf;
while (a >> buf)
cout << buf << endl;
a.clear();
return a;
}
int main()
{
istream& is = in(cin);
}
3.unitbuf和nounitbuf操纵符
cout<<unitbuf;//立即刷新缓冲区
cout<<nounitbuf; //回到正常的缓冲方式
可以将ofstream对象传递给形参为ostream& 类型,这是因为基类引用(指针)可以指向派生类