Tutorial Study Image

C++ 中的构造函数重载


2023年5月25日, Learn eTutorial
1045

本教程将通过一些示例介绍 C++ 中的构造函数重载。要完全理解构造函数重载,首先理解构造函数的概念非常重要。构造函数是一种特殊的方法,每当我们构造一个类对象时,它们都会自动调用。初始化新对象的数据成员是构造函数的主要目标。与函数重载类似,构造函数也可以重载。

重载构造函数与类名相同,但它们接受不同数量的参数。根据传递的参数数量和类型,会调用相应的构造函数。你将了解所有关于

C++ 中构造函数重载的含义是什么?

只要 C++ 中每个构造函数都有唯一的参数列表,我们就可以在一个类中拥有多个同名构造函数。这个概念被称为构造函数重载。

每个构造函数都与类同名,但它们因参数数量、参数数据类型或两者的组合而异。在 C++ 中使用构造函数重载时,我们可以在同一个类中拥有多个构造函数,只要它们各自接受不同的参数集,这与函数重载非常相似。

构造函数重载是指在一个类中拥有多个具有不同参数的构造函数的概念。这里需要记住的关键点是,构造函数将根据参数执行。例如,如果一个程序包含三个构造函数,分别带有 0 个参数、一个参数和两个参数,那么如果我们向构造函数提供一个参数,编译器将运行接受一个参数的构造函数。

C++ 构造函数重载的示例程序


#include <iostream>
using namespace std;

class Complex
{
    int a, b;

public:
    Complex(){
        a = 0;
        b =0;
    }

    Complex(int x, int y)
    {
        a = x;
        b = y;
    }

    Complex(int x){
        a = x;
        b = 0;
    }

  

    void printNumber()
    {
        cout << " So your number is " << a << " + " << b << "i" << endl;
    }
};
int main()
{
    Complex c1(8, 10);
    c1.printNumber();

    Complex c2(9);
    c2.printNumber();

    Complex c3;
    c3.printNumber();
    return 0;
}

 

输出


So your number is 8 + 10i
So your number is 9 + 0i
So your number is 0 + 0i

解释

  • 首先,构造了一个名为“complex”的类,其中包含私有数据成员“a”和“b”。
  • 然后声明了“complex”类的默认构造函数,它没有参数,并将数据成员“a”和“b”赋值为“0”。
  • 已确定“complex”类有一个参数化构造函数,它接受两个参数,并为数据成员“a”和“b”赋值。
  • 声明了“complex”类的一个参数化构造函数,它将接受一个参数并为数据成员“a”和“b”设置值。
  • 数据成员“a”和“b”有值,并且定义了函数“printNumber”来打印这些值。
  • 可以通过将对象“c1”和数字“8”和“10”传递给参数化函数构造函数来调用它。最重要的是要记住,该函数构造函数将执行两个参数。
  • 调用函数“printNumber”,并打印数据成员的值。
  • 参数化构造函数通过对象“c2”调用,并传递值“9”。最重要的是要记住,这将调用带有一个参数的构造函数。
  • 需要使用函数“printNumber”打印数据成员的值。
  • 对象“c3”用于调用默认构造函数。
  • 调用函数“printNumber”,它打印数据成员的值。

C++ 重载的不同类型

主要有两种重载类型

  • 函数重载
  • 运算符重载

函数重载

函数重载用于使程序更易于阅读。在使用函数重载时,不必为相同的操作使用不同的名称。C++ 中的函数重载是通过调用多个同名但参数不同的函数来实现的。

运算符重载

运算符重载用于对同一个操作数执行多种操作。运算符重载涉及对用户定义的数据类型执行操作,以增加 C++ 运算符的数量。

C++ 中构造函数重载的优势

C++ 中构造函数重载的优点是,通过在一个类中拥有额外的构造函数,可以创建属于该类的多种类型的对象。事实上,它类似于编译时多态性,编译时多态性是 C++ 函数重载的另一个名称。因此,如果我们要以不同的方式构造对象,C++ 需要构造函数重载。

构造函数重载与方法重载的区别

构造函数重载

  • 构造函数重载是指在一个类中编写多个构造函数,每个构造函数都有一组唯一的参数。
  • 每个构造函数都将包含类名。
  • 创建对象时,将使用重载构造函数。
  • 重载构造函数不能是静态的,因为构造函数与对象的创建相关联。
  • 考虑到构造函数不是从子类继承的,重载构造函数不能是 final 的,因为这不一致。
  • 为了阻止外部人员使用重载构造函数在类外部创建对象,可以将其设为私有。

方法重载

  • 方法重载是指在一个类中创建多个具有不同参数集的方法。
  • 每个方法都需要具有相同的名称。
  • 如果一个方法被重载但不是静态的,它只能在创建所需对象后调用。
  • 静态重载方法无需首先构造对象即可访问
  • 重载方法可以是 final 的,以避免被子类覆盖。
  • 为了阻止从类外部调用重载方法,可以将方法设为私有。

需要记住的要点

  • 重载构造函数和标准构造函数之间唯一的真正区别在于它们接受的参数数量和类型。
  • 根据提供给函数构造函数的参数数量和类型,它将被调用。
  • 在生成对象时,必须向编译器提供参数,以便编译器知道要调用哪个构造函数。