高清图片素材网站免费,百度快照手机版,长春做网站搜吉网传媒,网站推广在哪好外贸在本文中#xff0c;您将学习C 中的构造函数。您将学习什么是构造函数#xff0c;如何创建它以及C 中的构造函数类型。 构造函数是成员函数的一种特殊类型#xff0c;它在创建对象时会自动对其进行初始化。编译器通过其名称和返回类型将给定的成员函数标识为构造函数。构造函… 在本文中您将学习C 中的构造函数。您将学习什么是构造函数如何创建它以及C 中的构造函数类型。 构造函数是成员函数的一种特殊类型它在创建对象时会自动对其进行初始化。编译器通过其名称和返回类型将给定的成员函数标识为构造函数。构造函数与该类具有相同的名称并且没有任何返回类型。同样构造函数始终是公共的。
... .. ...
class temporary
{
private: int x;float y;
public:// 构造函数temporary(): x(5), y(5.5){// 构造函数体}... .. ...
};int main()
{Temporary t1;... .. ...
}
上面的程序显示了定义的构造函数没有返回类型并且名称与类相同。
构造函数如何工作 在上面的代码中temporary()是一个构造函数。创建类的对象时将自动调用构造函数temporary并将x初始化为5然后y初始化为5.5。您还可以按以下方式初始化构造函数体内的数据成员。但是这种不推荐使用此方法。
temporary()
{x 5;y 5.5;
}
// 这种方法不是首选的。
在C 中使用构造函数 假设您正在处理100个Person对象并且数据成员age的默认值为0。手动初始化所有对象将是一项非常繁琐的任务。 相反您可以定义一个初始化age为0 的构造函数。然后您要做的就是创建一个Person对象构造函数将自动初始化age。这些情况在处理对象数组时经常出现。另外如果要在创建对象后立即执行一些代码可以将代码放在构造函数的主体内。
示例1C 中的构造方法
计算并显示矩形的面积。
#include iostream
using namespace std;class Area
{private:int length;int breadth;public:// 构造函数Area() : length(5), breadth(2) { }void GetLength(){cout 分别输入长度和宽度: ;cin length breadth;}int AreaCalculation() { return (length * breadth); }void DisplayArea(int temp){cout 面积: temp;}
};int main()
{Area A1, A2;int temp;A1.GetLength();temp A1.AreaCalculation();A1.DisplayArea(temp);cout endl 不从用户那里获取值时的默认面积为: endl;temp A2.AreaCalculation();A2.DisplayArea(temp);return 0;
}
输出结果 在这个程序中创建类Area来处理面积相关的函数。它有两个数据成员length和breadth。定义了一个初始化length为5和breadth为2的构造函数。我们还具有三个附加的成员函数GetLength(), AreaCalculation() 和 DisplayArea()分别从用户处获取长度计算面积以及显示面积。 当创建对象A1和A2时由于构造函数的关系这两个对象的长度(length)和(breadth)宽度分别初始化为5和2。 然后调用成员函数GetLength()该函数从用户那里获取对象A1的长度(length)和(breadth)宽度值。 这改变了对象A1的长度(length)和(breadth)宽度。 然后通过调用AreaCalculation()函数计算对象A1的面积并将其存储在变量temp中最后显示出来。 对于对象A2不要求用户提供任何数据。 因此长度(length)和(breadth)宽度分别保持5和2。然后计算并显示A2的面积为10。 构造函数重载 构造函数也可以类似于函数重载的方式重载。重载的构造函数具有相同的名称类的名称但参数个数不同。根据传递的参数的个数和类型将调用特定的构造函数。由于存在多个构造函数因此在创建对象时也应传递构造函数的参数。
示例2构造函数重载
// 源代码演示重载的构造函数的工作原理
#include iostream
using namespace std;class Area
{
private:int length;int breadth;public:// 无参数构造函数Area() : length(5), breadth(2) { }// 有两个参数的构造函数Area(int l, int b) : length(l), breadth(b) { }void GetLength(){cout 分别输入长度和宽度 ;cin length breadth;}int AreaCalculation() { return length * breadth; }void DisplayArea(int temp){cout 面积: temp endl;}
};int main()
{Area A1, A2(2, 1);int temp;cout 没有传递参数时的默认面积。 endl;temp A1.AreaCalculation();A1.DisplayArea(temp);cout 2,1作为参数传递时的面积。 endl;temp A2.AreaCalculation();A2.DisplayArea(temp);return 0;
}
输出结果 对于对象A1创建对象时不传递任何参数。因此将调用不带参数的构造函数该构造函数将长度(length)初始化为5宽度(breadth)初始化为2。因此对象A1的面积将为10。 对于对象A2在创建对象时将2和1作为参数传递。因此将调用具有两个参数的构造函数该构造函数将长度(length)初始化为l在这种情况下为2并将宽度(breadth)初始化为b在这种情况下为1。 因此对象A2的面积将为2。
默认拷贝构造函数 一个对象可以用另一个相同类型的对象初始化。这与将一个类的内容复制到另一个类是一样的。在上面的程序中如果你想初始化一个对象A3使它包含与A2相同的值可以这样执行:
....
int main()
{Area A1, A2(2, 1);// 将A2的内容复制到A3Area A3(A2);OR, Area A3 A2;
} 您可能会想您需要创建一个新的构造函数来执行这个任务。但是不需要额外的构造函数。这是因为默认情况下复制构造函数已经内置到所有类中。
验证代码如下
// 源代码演示重载的构造函数的工作原理
#include iostream
using namespace std;class Area
{
private:int length;int breadth;public:// 无参数构造函数Area() : length(5), breadth(2) { }// 有两个参数的构造函数Area(int l, int b) : length(l), breadth(b) { }void GetLength(){cout 分别输入长度和宽度 ;cin length breadth;}int AreaCalculation() { return length * breadth; }void DisplayArea(int temp){cout 面积: temp endl;}
};int main()
{Area A1, A2(2, 1);int temp;cout 没有传递参数时的默认面积。 endl;temp A1.AreaCalculation();A1.DisplayArea(temp);cout A22,1作为参数传递时的面积。 endl;temp A2.AreaCalculation();A2.DisplayArea(temp);Area A3(A2); // 或者Area A3 A2;cout A32,1作为参数传递时的面积。 endl;temp A3.AreaCalculation();A3.DisplayArea(temp);return 0;
}
输出结果