class A float x,y, 带缺省参数的构造函数 public: A(float a, float b=10) x=a; y=b;3 A0{x=0;y=0;}-不带参数的构造函数 void Print(void)cout<<x<<'t<<y<<endl; }; void main(void) {Aal,a2(20.0),a3(3.0,7.0) rIn t(;每一个对象必2010 a2. printO 须要有相应的37 a3. PrintO 构造函数
11 class A{ float x,y; public: A(float a, float b=10) { x=a; y=b; } A() { x=0; y=0;} void Print(void) {cout<<x<<'\t'<<y<<endl; } }; void main(void) { A a1, a2(20.0), a3(3.0, 7.0); a1.Print(); a2.Print(); a3.Print(); } 0 0 20 10 3 7 带缺省参数的构造函数 不带参数的构造函数 每一个对象必 须要有相应的 构造函数
每一个对象必须要有相应的构造函数 若没有显式定义构造函数, 系统默认缺省的构造函数 class A 对象开辟了空间,但没有初始化 float x,y; public 隐含的缺省的构造函数 Ao tH void Print(void)(cout<<x<<It<<y<<end; j 只允许这样定义对象 a al. a
12 每一个对象必须要有相应的构造函数 若没有显式定义构造函数, 系统默认缺省的构造函数。 class A{ float x,y; public: A() {} void Print(void) {cout<<x<<'\t'<<y<<endl; } }; 隐含的缺省的构造函数 A a1, a2; 只允许这样定义对象 对象开辟了空间,但没有初始化
●●● ●●●●● 构造函数 ●●●● ●●● ● 关于缺省的构造函数,说明以下几点 在定义类时,只要显式定义了一个类的构造函数 则编译器就不产生缺省的构造函数 所有的对象在定义时,必须调用构造函数 不存在没有构造函数的对象! 缺省的构造函数并不对所产生对象的数据成员赋 初值;即新产生对象的数据成员的值是不确定的
13 构造函数 不存在没有构造函数的对象! ⚫ 缺省的构造函数并不对所产生对象的数据成员赋 初值;即新产生对象的数据成员的值是不确定的。 ⚫ 所有的对象在定义时,必须调用构造函数 关于缺省的构造函数,说明以下几点: ⚫ 在定义类时,只要显式定义了一个类的构造函数, 则编译器就不产生缺省的构造函数
●●● ●●●●● 构造函数的特点 ●●●● ●●● ● ●存在性 >每一个对象必须要有与之对应的构造函数 >所有的对象在定义时,必须调用构造函数 >不存在没有构造函数的对象 ●唯一性 >任一对象调用的构造函数必须唯
构造函数的特点 ⚫ 存在性 ➢ 每一个对象必须要有与之对应的构造函数 ➢ 所有的对象在定义时,必须调用构造函数 ➢ 不存在没有构造函数的对象 ⚫ 唯一性 ➢ 任一对象调用的构造函数必须唯一 14
●●● ●●●●● 构造函数的特点 ●●●● ●●● ● ●缺省的构造函数 若无显式定义构造函数,系统产生默认缺省构造函数 若已显式定义构造函数,系统不产生默认缺省构造函数 1.不带参数的构造函数 AOf 缺省的构 造函数 2.带默认缺省值的构造函数A(inta=3){}
构造函数的特点 ⚫ 缺省的构造函数 ➢ 若无显式定义构造函数,系统产生默认缺省构造函数 ➢ 若已显式定义构造函数,系统不产生默认缺省构造函数 缺省的构 造函数 1.不带参数的构造函数 2.带默认缺省值的构造函数 A( ){ } A(int a=3 ){ } 15