只有当类没有声明任何构造函数时,编译器才会自动的生成默认构造函数。

在类的外部定义构造函数:

构造函数的名字必须与类名相同,构造函数没有返回类型,sales_data::sales_data的含义是我们定义的sales_data类的成员,他的名字是sales_data.又因为该成员的名字和类名相同,所以它是一个构造函数。

sales_data::sales_data(std::istream &is)

{

    read(is,*this);//read函数的作用是从is中读取一条交易信息然后存入this对象中。

}

这个构造函数没有函数初始值列表,或者讲的更加准确一些,他的构造函数初始值列表是空的。尽管构造函数初始值列表是空的,但是由于执行了构造函数体,所以对象的成员仍然能被初始化。

知识点1:构造函数—特殊的成员函数,用来控制对象的初始化过程。无返回类型,可重载,不能被声明为const.

知识点2:若无,则有默认的构造函数,是编译器自己隐式的定义的。又称合成的默认构造函数。

知识点3:某些类是不能使用默认的构造函数的,以下三个原因:

1:在未声明任何构造函数的前提下,类内对象的初始化将不受控制

2:合成的默认构造函数可能会造成不必要的错误,如若没有类内初始值来初始化成员,可能这些成员将是未定义的。

3:如果类中包含了一个其他类类型的成员,且这个成员的类型没有默认构造函数,那么编译器将无法初始化该对象。

所以,在撰写类的时候,最好定义一个自

己的构造函数。