C++构造函数

        在本文中,您将学习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。这些情况在处理对象数组时经常出现。另外,如果要在创建对象后立即执行一些代码,可以将代码放在构造函数的主体内。

示例1:C ++中的构造方法

计算并显示矩形的面积。

#include 
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;
}

输出结果: 

C++构造函数_第1张图片

        在这个程序中,创建类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 
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;
}

输出结果:

 C++构造函数_第2张图片

        对于对象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的内容复制到A3
   Area A3(A2);
     OR, 
   Area A3 = A2;
}

        您可能会想,您需要创建一个新的构造函数来执行这个任务。但是,不需要额外的构造函数。这是因为默认情况下,复制构造函数已经内置到所有类中。

验证代码如下:

// 源代码演示重载的构造函数的工作原理
#include 
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 << "A2(2,1)作为参数传递时的面积。" << endl;
    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);

    Area A3(A2); // 或者Area A3 = A2;
    cout << "A3(2,1)作为参数传递时的面积。" << endl;
    temp = A3.AreaCalculation();
    A3.DisplayArea(temp);
    return 0;
}

输出结果: 

C++构造函数_第3张图片

你可能感兴趣的:(C++,c++)