c 列表初始化
可以将列表初始化用在类的初始化当中
代码语言:javascript复制Stock s1 = {"name",100,45.0};
Stock s2{"name1"}
Stock s3{}
前俩个声明,与我们定义的构造函数匹配,最后一个声明会调用默认构造函数
const 成员函数
const Stock land = Stock("Kludgehorn Properties"); land.show(); 我们之前在const详解这篇笔记说过,const对象只能调用const成员函数。书上也解释了这一原因:因为show代码也不能保证调用对象不被修改,之前我们在函数 Stock(const std::string& co, long n, double pr);通过const std::string& co来确定实参和形参的对象是一个对象,保证不被修改,但是这里的show函数没有参数,且调用方式是由创建对象所默认的方法。可以通过在成员函数后面加入const限定符,声明成员函数不会修改成员。这种就叫const成员函数。就像应尽可能将const引用和指针用作函数形参一样,只要类方法不修改成员,我们都应将其声明为const。
构造函数和析构函数小结
构造函数是一种特殊的类成员函数,在创建对象时调用。构造函数的名称和类名相同,但是通过函数重载,可以创建多个同名的构造函数,条件是参数列表不同(函数重载我会在后面笔记再强调的),通常,构造函数用于初始化对象的成员,初始化应与构造函数的参数列表相匹配。 如果bozo的构造函数原型如下:
代码语言:javascript复制bozo(const char * fname,const char*lname);
bozo a = bozo("bozetta","biggens"); bozo bb("fufu","O'dweeb"); bozo*pc = new bozo("poopo","le peu"); 假如构造函数只有一个参数,则对象将初始化为一个与参数的类型相同的值时,该构造函数将被调用。 调用格式:
代码语言:javascript复制bozo dirbble = bozo(44);
bozo roon(66);
bozo tubby = 32;
默认构造函数没有参数,因此如果没有显式地初始化对象,那么将默认调用构造函数,如果程序没有任何构造函数,那么程序会定义一个默认构造函数,默认构造函数可以没有任何参数,如果有参数的话,必须给所有参数提供默认值。在参数列表可以初始化也可以在定义初始化。
代码语言:javascript复制bozo();
bozo(const char *s = "Chez Zero");
对于未被初始化的对象,程序将使用默认构造函数来创建:
代码语言:javascript复制bozo bubi;
bozo *pb = new bozo;
就像对象被创建时调用构造函数一样,当对象被删除时候,程序将调用析构函数,每个类只有一个析构函数。析构函数没有返回类型,也没有参数,其名称为类名称前加上~。
例如:~bozo
,如果构造函数使用了new,则必须使用delete的析构函数