🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# C++ 中的构造函数 > 原文: [https://beginnersbook.com/2017/08/cpp-constructors/](https://beginnersbook.com/2017/08/cpp-constructors/) 构造函数是初始化类对象的类的特殊成员函数。构造函数名称与类名称相同,并且没有返回类型。让我们举一个简单的例子来理解构造函数的工作原理。 ## 简单示例:如何在 C++ 中使用构造函数 阅读以下程序中的注释,以了解该程序的每个部分。 ```cpp #include <iostream> using namespace std; class constructorDemo{ public: int num; char ch; /* This is a default constructor of the * class, do note that it's name is same as * class name and it doesn't have return type. */ constructorDemo() { num = 100; ch = 'A'; } }; int main(){ /* This is how we create the object of class, * I have given the object name as obj, you can * give any name, just remember the syntax: * class_name object_name; */ constructorDemo obj; /* This is how we access data members using object * we are just checking that the value we have * initialized in constructor are reflecting or not. */ cout<<"num: "<<obj.num<<endl; cout<<"ch: "<<obj.ch; return 0; } ``` **输出:** ```cpp num: 100 ch: A ``` ## 构造函数与成员函数 现在我们知道什么是构造函数,让我们讨论构造函数与类的成员函数的不同之处。 1)构造函数没有返回类型。成员函数具有返回类型。 2)当我们创建类的对象时,会自动调用构造函数。需要使用类的对象显式调用成员函数。 3)当我们不在我们的类中创建任何构造函数时,C++ 编译器生成一个默认构造函数并将其插入到我们的代码中。这同样适用于成员函数。 这是编译器生成的默认构造函数的外观: ```cpp class XYZ { .... XYZ() { //Empty no code } }; ``` ## C++ 中构造函数的类型 C++ 中有两种类型的构造函数。 1)默认构造函数 2)参数化构造函数 ### 1)默认构造函数 默认构造函数没有任何参数(或参数)。 ```cpp #include <iostream> using namespace std; class Website{ public: //Default constructor Website() { cout<<"Welcome to BeginnersBook"<<endl; } }; int main(void){ /*creating two objects of class Website. * This means that the default constructor * should have been invoked twice. */ Website obj1; Website obj2; return 0; } ``` **输出:** ```cpp Welcome to BeginnersBook Welcome to BeginnersBook ``` > 如果未在类中指定任何构造函数,则编译器将在代码中插入没有代码(空体)的默认构造函数。 ### 2)参数化构造函数 带参数的构造函数称为参数化构造函数。这些类型的构造函数允许我们在创建对象时传递参数。让我们看看他们的样子: 让我们假设类名是`XYZ`。 **默认构造函数:** ```cpp XYZ() { } .... XYZ obj; .... ``` **参数化构造函数:** ```cpp XYZ(int a, int b) { } ... XYZ obj(10, 20); ``` #### 例: ```cpp #include <iostream> using namespace std; class Add{ public: //Parameterized constructor Add(int num1, int num2) { cout<<(num1+num2)<<endl; } }; int main(void){ /* One way of creating object. Also * known as implicit call to the * constructor */ Add obj1(10, 20); /* Another way of creating object. This * is known as explicit calling the * constructor. */ Add obj2 = Add(50, 60); return 0; } ``` **输出:** ```cpp 30 110 ```