构造函数应用注意点 1.若自己不定义构造函数,编译程序提供一个缺省构 造函数。 2.若程序用到指针,则应自定义构造函数,以减少程 序出错机会。 3.构造函数和析构函数应成对定义,以养成良好的编 程习惯。 2021/224 6
2021/2/24 6 构造函数应用注意点: 1. 若自己不定义构造函数,编译程序提供一个缺省构 造函数。 2. 若程序用到指针,则应自定义构造函数,以减少程 序出错机会。 3. 构造函数和析构函数应成对定义,以养成良好的编 程习惯
例3:定义一个矩形类的构造函数。 构造函数和对象的初始化 103 构造函数属类的成员函数,故对私有成员 数据、保护的成员数据和公有的成员数据均能 进行初始化。 例4:自动调用构造函数来初始化对象。 执行后输出: 调用带参数的构造函数!104 100200300400 调用不带参数的构造函数! 0000 2021/224
2021/2/24 7 例3:定义一个矩形类的构造函数。 构造函数和对象的初始化 103 构造函数属类的成员函数,故对私有成员 数据、保护的成员数据和公有的成员数据均能 进行初始化。 例4:自动调用构造函数来初始化对象。 104 执行后输出: 调用带参数的构造函数! 100 200 300 400 调用不带参数的构造函数! 0 0 0 0
例5:产生全局对象、静态对象和局部对象。 执行后输出: 105 调用带参数的构造函数(全局)! 进入主函数main( 200300400500 进入函数1( 调用带参数的构造函数(静态)! 2002005000 调用带参数的构造函数(局部) 10010000 调用带参数的构造函数(局部)! 10020000 调用不带参数的构造数! 0000 进入函数fl( 2002005000 调用带参数的构造函数(局部)! 10010000 2021/224 8
2021/2/24 8 例5:产生全局对象、静态对象和局部对象。 执行后输出: 105 调用带参数的构造函数(全局)! 进入主函数main( ) 200 300 400 500 进入函数f1( ) 调用带参数的构造函数(静态)! 200 200 500 0 调用带参数的构造函数(局部)! 100 100 0 0 调用带参数的构造函数(局部)! 100 200 0 0 调用不带参数的构造数! 0 0 0 0 进入函数f1( ) 200 200 500 0 调用带参数的构造函数(局部)! 100 100 0 0
构造函数和new运算符 用new可建立对象。此时要自动调用构造函数, 以完成对象的成员数据初始化。 例6:用new运算符建立对象时调用构造函数。 106 执行后输出: 调用构造函数D(int,int)! 5y=10 调用构造函数D()! x=842150451y=-842150451 2021/224 9
2021/2/24 9 构造函数和new运算符 用new可建立对象。此时要自动调用构造函数, 以完成对象的成员数据初始化。 例6:用new运算符建立对象时调用构造函数。 106 执行后输出: 调用构造函数D(int,int)! x=5 y=10 调用构造函数D()! x=-842150451 y=-842150451
缺省的构造函数 定义类时若没有定义类的构造函数,编译器自动 产生一个缺省的构造函数,格式为: 类名:类名(){} 这是一个函数体为空的构造函数,在产生对象时, 调用的该构造函数不做任何事,新产生对象的数据 成员的值是不确定的。 注:1若定义时定义了类的构造函数,则不产生缺省 的构造函数。 2缺省的构造函数只能有一个。 3需要对对象的数据成员进行初始化时,必须定义构 造函数 2021/224 10
2021/2/24 10 缺省的构造函数 定义类时若没有定义类的构造函数,编译器自动 产生一个缺省的构造函数,格式为: 类名::类名(){ } 这是一个函数体为空的构造函数,在产生对象时, 调用的该构造函数不做任何事,新产生对象的数据 成员的值是不确定的。 注:1.若定义时定义了类的构造函数,则不产生缺省 的构造函数。 2.缺省的构造函数只能有一个。 3.需要对对象的数据成员进行初始化时,必须定义构 造函数