【C++primer】构造函数
#include <iostream>
using namespace std;
class Sales_data
{
public:
Sales_data(std::string s) : bookNo(s)
{
} // 自定义构造函数
string bookNo;
string str;
};
int main()
{
Sales_data data2("hello");
}
调用构造函数,仅仅只是初始化了bookNo,但是str并没有被初始化,但是通过单步调试,str被默认初始化为空字符串(“”),也就是说:在创建data2对象的过程中,间接地调用了两个不同类型的构造函数:一个是Sales_data的构造函数,另一个是std::string的默认构造函数。
那么就有个问题:既然调用了自己定义的构造函数(Sales_data(std::string s) : bookNo(s)
),就不可能再调用默认构造函数,这岂不是矛盾?
原因是:这是两个不同类型的构造函数。
当我们创建一个Sales_data对象,比如Sales_data data2("hello");,我们实际上在调用Sales_data类的一个构造函数,那么就不能再调用Sales_data类的默认构造函数,但是并不妨碍我们调用std::string的默认构造函数来初始化str

构造函数是 :
Sales_data(std::istream& is)
{ read(is, *this);
}
然后调用构造函数构造对象:
Sales_data total(cin);
this指针只能存在于member function中,当调用构造函数构造对象(初始化对象)的时候,可以认为是构造函数正在作用于类对象(total),然后会把total的地址,即&total传递给this指针,所以this指向了total对象。