找工作笔试面试那些事儿(5)---构造函数、析构函数和赋值函数
学过C++的人都说自己知道构造函数、析构函数与赋值函数。它们看似太普通,以致让人容易麻痹大意,但请你认真读完这部分内容,你会发现这些貌似简单的函数实则像没有顶盖的下水道那样危险。
每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如
class Base { public: …Base & operate =(const Base &other); // 类Base的赋值函数private: int m_i, m_j, m_k; }; class Derived : public Base { public: …Derived & operate =(const Derived &other); // 类Derived的赋值函数private: int m_x, m_y, m_z; }; Derived & Derived::operate =(const Derived &other) { //(1)检查自赋值if(this == &other) return *this; //(2)对基类的数据成员重新赋值Base::operate =(other); // 因为不能直接操作私有数据成员//(3)对派生类的数据成员赋值m_x = other.m_x; m_y = other.m_y; m_z = other.m_z; //(4)返回本对象的引用return *this; }