12.1 类与对象
1. 类与对象的区别
一个类描述一类事物,描述这些事物所应共有的属性。一个对象是类的一个实例,它具有确定的属性。
2.对象的初始化
1.C++建立和初始化对象的过程专门由该类的构造函数来完成。C++另外还有一类析构函数,它也是类的成员函数,当对象撤销时,就会马上被调用,其作用是释放与对象捆绑的资源,做一些善后处理。
2.每个类只负责初始化它自己的对象。
12.2 构造函数的重要性
由于类的保护数据在外界是不能访问的,所以需要使用构造函数来对类对象的初始化。
12.3 构造函数的使用
1.C++规定与类同名的成员函数是构造函数,在该类的对象创建时,自动被调用。 与成员函数相同,构造函数可以放在类的外部定义。
2.在外部定义的构造函数,其函数名前要加上“类名::”,这和别的成员函数定义方法一样。
3.构造函数没有返回类型,函数体中也不允许返回值,但可以有无值返回语句“return;”。
4.如果一个类对象是另一个类的数据成员,则在创建那个类的对象所调用的构造函数中,对该成员(对象)自动调用其构造函数。
12.4 析构函数
1.析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。他只是在类对象生命期结束的时候,由系统自动调用。
2.类的每个对象生命期结束时,都要调用析构函数,这与构造函数形成鲜明的对立,所以析构函数名就在构造函数名前加一个逻辑非运算符“~”,表示“逆构造函数”。
12.5 带参数的构造函数
1.下面的程序定义了一个带参数的学生类:
2.构造函数在参数规定上和普通函数一样,可以有任意多个参数。
12.6 重载构造函数
1.参数函数可以被重载,C++会根据声明中的参数选择合适的构造函数。
12.7 默认构造函数
1.C++规定,每个类必须有一个构造函数,如果没有构造函数,就不能创建任何对象。
2.若未提供一个类的构造函数(一个都未提供),则C++提供一个默认的构造函数,该默认构造函数是一个无参构造函数,它仅负责创建对象空间,而不做任何初始化工作。
3.只要一个类定义了一个构造函数(不一定是无参构造函数),C++就不在提供默认的构造函数。也就是说,如果为类定义了一个带参数的构造函数,还想要无参构造函数,则必须自己定义。
4.与定义变量类似,在用默认构造函数创建对象时,如果创建的时全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的。
5.无参构造函数定义时不能带括号,否则就是声明一个普通函数。
12.8 类函数初始化的困惑
1.若一个类的对象时另一个类的数据成员,在声明此数据成员时不能对其进行初始化,只能按照格式“类型 表示符;”去声明类的数据成员。
例如:
12.9 构造类成员
1.类成员初始化形式
在Student的构造函数头的后面,冒号表示后面要对类的数据成员的构造函数进行引用。ssID是Student构造函数的形参,id(ssID)表示调用以ssID为实参的StudentID构造函数。若Student构造函数头冒号后面是id()的形式,表示调用 StudentID的默认构造函数,并且可以省略。
12.10 构造对象的顺序
1.创造对象的唯一途径是调用构造函数。
2.局部和静态对象,以声明的顺序构造。
3.所有全局对象都在主函数main()之前被构造。
4.全局对象构造时无特殊顺序,为了避免错误,不要允许一个全局对象访问另一个全
局对象。
5.成员及其在类中声明的顺序构造
例如: