C++构造函数详解:对象初始化与类B成员

需积分: 10 1 下载量 5 浏览量 更新于2024-08-19 收藏 2.77MB PPT 举报
在C++编程中,构造函数与对象成员的关系至关重要,特别是在创建类A的对象时,如果类A的实例包含了另一个类B的对象。例如,我们有两个类: ```cpp class B { // 类B的成员 }; class A { int x, y; B b1, b2; // 类A包含类B的两个对象b1和b2 }; ``` 构造函数在对象的生命周期中扮演着初始化的角色。当一个类A的对象被创建时,不仅会初始化自身的成员变量,还会自动调用类B的构造函数,为每个类B的对象分配内存并设置默认值。这是因为在类A的定义中,类B的对象是作为类A成员的一部分存在的。 例如,当我们看到这样的构造函数定义: ```cpp A::A(int n=2) { // 类A的构造函数可能包括对b1和b2的初始化 b1 = B(); // 调用B类的默认构造函数 b2 = B(n); // 如果b2的构造函数接受一个整数参数,那么可以传递给它 } ``` 在C++中,还存在具有缺省参数值的函数,这是一种实用的功能,可以在调用时提供灵活性。如`fac()`和`area()`函数所示: ```cpp // fac()函数示例,有一个缺省参数n=2 int fac(int n = 2) { int t = 1; for (int i = 1; i <= n; i++) { t = t * i; } return t; } // area()函数示例,有两个缺省参数long=4和width=2 int area(int longVal = 4, int width = 2) { return longVal * width; } ``` 在使用这些函数时,如果不提供实参,就会使用缺省值;若提供实参,则使用传入的值。但需要注意,缺省参数规则如下: 1. 缺省参数必须放在参数列表的最后,且不能靠左边定义。 2. 函数原型声明时可以省略参数名,但实际定义时需要完整列出。 3. 缺省参数只能在函数原型中定义一次,不能在定义时重复设定。 此外,C++支持函数的重载,即多个同名函数但参数列表不同或参数类型不同,编译器根据调用时的实际参数类型和数量选择合适的函数。例如: ```cpp // 两个重载的fun函数 int fun(int a, int b) { return a + b; } float fun(int a) { return a * a; } ``` 在这个例子中,`fun(3, 5)`将调用第一个整数版本,而`fun(3)`会调用第二个单参数版本,因为返回类型不同,这并不构成重载。 总结来说,C++的构造函数与对象成员以及函数的缺省参数和重载是构建复杂类和模块化代码的关键概念,理解它们的用法对于编写高效和灵活的C++程序至关重要。