C++类

  • public成员提供类的接口,private成员提供具体实现细节。
  • struct是成员默认为public的class。

一个类对象可以用同类的另一个对象的副本进行初始化:

1
2
Date d1 = my_birthday;
Date d2{my_birthday};

默认情况下,一个类对象的副本是对每个成员逐个拷贝得到的。如果这种默认拷贝行为不是我们所希望的,可以提供更恰当的行为。
类似的,类对象也可以通过赋值操作拷贝:

1
2
3
void f(Date& d){
    d = my_birthday;
}

可以将一个类成员定义为mutable,表示即使是在const对象中,也可以修改成员。

抽象机制

移动和拷贝的区别在于,拷贝操作后两个对象具有相同的值,而移动操作后移动源不一定具有其原始值。如果源对象在操作后不再使用,就可以使用移动操作。

1
2
3
4
5
6
7
8
9
class X{
    X(sometype); //普通构造函数
    X(); //默认构造函数
    X(const X&); //拷贝构造函数
    X(X&&); //移动构造函数
    X& operator = (const X&); //拷贝赋值运算符,清理目标对象并进行拷贝
    X& operator = (X&&); //移动赋值运算符,清理目标对象并进行移动
    ~X(); //析构函数
};