欢迎光临散文网 会员登陆 & 注册

【C++primer】构造函数

2023-06-24 12:08 作者:我是信信信  | 我要投稿

 #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对象。


【C++primer】构造函数的评论 (共 条)

分享到微博请遵守国家法律