int main() {Student stud1(10010,"Wang_li",'f); /建立对象stud1 stud1.display() /输出学生1的数据 Student stud2(10011,"Zhang_fun",'m'); /定义对象stud2 stud2.display()月 /输出学生2的数据 return 0;
int main( ) {Student stud1(10010,″Wang_li″,′f′); //建立对象stud1 stud1.display( ); //输出学生1的数据 Student stud2(10011,″Zhang_fun″,′m′); //定义对象stud2 stud2.display( ); //输出学生2的数据 return 0; }
程序运行结果如下: Constructor called. (执行stud1的构造函数) num:10010 (执行stud1的displayi函数) name:Wang li sex:f Constructor called. (执行stud2的构造函数) num:10011 (执行stud2的displayi函数) name:Zhang fun sex:m Destructor called. (执行stud2的析构函数) Destructor called. (执行stud1的析构函数)
程序运行结果如下: Constructor called. (执行stud1的构造函数) num: 10010 (执行stud1的display函数) name:Wang_li sex: f Constructor called. (执行stud2的构造函数) num: 10011 (执行stud2的display函数) name:Zhang_fun sex:m Destructor called. (执行stud2的析构函数) Destructor called. (执行stud1的析构函数)
9.3调用构造函数和析构函数的顺序 构造函数和析构函数的调用时间和调用顺序 调用析构函数的次序正好与调用构造函数 的次序相反 最先被调用的构造函数, 其对应的析构函数最后被调用 最后被调用的构造函数, 其对应的析构函数最先被调用
9.3 调用构造函数和析构函数的顺序 构造函数和析构函数的调用时间和调用顺序 调用析构函数的次序正好与调用构造函数 的次序相反 最先被调用的构造函数, 其对应的析构函数最后被调用 最后被调用的构造函数, 其对应的析构函数最先被调用
象1 对象1 的 的 构造函数 析构函数 对象2 对象2 的 构造函数 析构函数 对 象3 的 的 构造函数 析构函数 图9.1
图9.1
对象可以在不同的作用域中定义,可以有不同的存储类 别。这些会影响调用构造函数和析构函数的时机。 归纳一下什么时候调用构造函数和析构函数: (1)在全局范围中定义的对象(即在所有函数之外定义的 对象),它的构造函数在文件中的所有函数(包括main函数) 执行之前调用。但如果一个程序中有多个文件,而不同 的文件中都定义了全局对象,则这些对象的构造函数的 执行顺序是不确定的。当main函数执行完毕或调用exit 函数时(此时程序终止),调用析构函数
(1) 在全局范围中定义的对象(即在所有函数之外定义的 对象),它的构造函数在文件中的所有函数(包括main函数) 执行之前调用。但如果一个程序中有多个文件,而不同 的文件中都定义了全局对象,则这些对象的构造函数的 执行顺序是不确定的。当main函数执行完毕或调用exit 函数时(此时程序终止),调用析构函数。 对象可以在不同的作用域中定义,可以有不同的存储类 别。这些会影响调用构造函数和析构函数的时机。 归纳一下什么时候调用构造函数和析构函数: