C++构造函数

在C++中,构造函数是一种特殊的方法,在对象创建时自动调用。它用于初始化新对象的数据成员。C++中的构造函数与类或结构体具有相同的名称。

简而言之,当在C++中创建对象时,会自动调用一个特定的过程,称为构造函数。通常情况下,它用于创建新事物的数据成员。在C++中,类或结构体的名称也作为构造函数的名称。当对象完成时,构造函数被调用。由于它创建值或为事物提供数据,所以称为构造函数。

构造函数的原型如下:

<class-name>(参数列表); 

以下语法用于定义类的构造函数:

<class-name>(参数列表) { // 构造函数定义 } 

以下语法用于在类外定义构造函数:

<class-name>::<class-name>(参数列表) { // 构造函数定义 } 

构造函数没有返回类型,因为它们没有返回值。

C++中有两种类型的构造函数:

  • 默认构造函数
  • 带参数的构造函数

C++默认构造函数

没有参数的构造函数被称为默认构造函数。它在创建对象时被调用。

让我们看一个C++默认构造函数的简单示例。

#include <iostream>
using namespace std;
class Employee
{
public:
Employee()
{
cout << "默认构造函数被调用" << endl;
}
};
int main(void)
{
Employee e1; // 创建一个Employee对象
Employee e2;
return 0;
}

输出:

默认构造函数被调用 
默认构造函数被调用

C++参数化构造函数

具有参数的构造函数被称为参数化构造函数。它用于为不同的对象提供不同的值。

让我们看一个C++参数化构造函数的简单示例。

#include <iostream>
using namespace std;
class Employee {
public:
int id; // 数据成员(也称为实例变量)
string name; // 数据成员(也称为实例变量)
float salary;
Employee(int i, string n, float s)
{
id = i;
name = n;
salary = s;
}
void display()
{
cout << id << " " << name << " " << salary << endl;
}
};
int main(void) {
Employee e1 = Employee(101, "Sonoo", 890000); // 创建一个Employee对象
Employee e2 = Employee(102, "Nakul", 59000);
e1.display();
e2.display();
return 0;
}

输出:

101 Sonoo 890000 
102 Nakul 59000 

构造函数与普通成员函数有什么区别?

  1. 构造函数的名称与所属类的名称相同。
  2. 默认构造函数没有输入参数。然而,对于复制和带参数的构造函数,可以使用输入参数。
  3. 构造函数没有返回类型。
  4. 在创建对象时,构造函数会自动调用。
  5. 构造函数必须在类的公共区域中声明。
  6. 如果没有指定构造函数(没有期望任何参数并且具有空函数体),C++编译器会为对象创建一个默认构造函数。

通过一个实际的例子来了解C++中的不同构造函数类型。想象一下你去商店买记号笔。如果你想买一个记号笔,你有什么选择?第一种情况下,你只是要求商店给你一个记号笔,因为你没有指定你想要的品牌或颜色,只是请求一个数量。所以当我们只说“我只需要一个记号笔”时,他会把市场上或他店里最受欢迎的记号笔给我们。默认构造函数正是它所听起来的那样!第二种方法是进入商店并说明你想要一个红色的XYZ品牌的记号笔。因为你提到了这个话题,他会给你那只记号笔。在这种情况下已经设置了参数。带参数的构造函数正是它所听起来的那样!第三种方法需要你去商店并声明你想要一个看起来像这样的记号笔(手上的一个物理记号笔)。这样店主会注意到那个记号笔。当你说好了,他会给你一个全新的记号笔。因此,复制那只记号笔。这就是复制构造函数所做的!

构造函数的特点是什么?

  1. 构造函数与它所属类具有相同的名称。
  2. 虽然可以,但构造函数通常在类的public部分中声明。但这不是必须的。
  3. 由于构造函数没有返回值,所以它们没有返回类型。
  4. 在创建类对象时,构造函数会自动调用。
  5. 可以有重载的构造函数。
  6. 不允许将构造函数声明为虚函数。
  7. 不能继承构造函数。
  8. 构造函数的地址不能被引用。
  9. 在分配内存时,构造函数会隐式调用new和delete运算符。

什么是拷贝构造函数?

拷贝构造函数是一种称为拷贝构造函数的成员函数,它使用同类的另一个对象初始化一个对象-有关拷贝构造函数的详细讨论。

当为一个类指定一个或多个非默认构造函数(带有参数)时,我们也需要包含一个默认构造函数(没有参数),因为在这种情况下编译器不会提供一个。最佳实践是始终声明一个默认构造函数,即使它不是必需的。

拷贝构造函数需要引用同一类的对象。

cppCopy code
Sample(Sample &t)  
{  
    id = t.id;  
}

什么是析构函数?

析构函数是与构造函数相对应的特殊成员函数。构造函数创建类的对象,而析构函数用于销毁这些对象。析构函数的名称与类名相同,前面加上波浪线(~)。每次只能定义一个析构函数。使用析构函数是销毁由构造函数创建的对象的一种方式。因此,析构函数不可重载。析构函数不接受任何参数,也不返回任何值。一旦对象离开其作用域,析构函数立即被调用。析构函数释放构造函数生成的对象所使用的内存。析构函数通过销毁对象来逆转创建对象的过程。

定义类的析构函数的语法如下:

cppCopy code
~<class-name>()
{
    // 析构函数定义
}

在类外定义类的析构函数的语法如下:

cppCopy code
<class-name>::~<class-name>()
{
    // 析构函数定义
}

需要注意的是,每个类只能有一个析构函数。

标签: C++语言, C++语言教程, C++语言技术, C++语言学习, C++语言学习教程, C++语言下载, C++语言开发, C++语言入门教程, C++语言进阶教程, C++语言高级教程, C++语言面试题, C++语言笔试题, C++语言编程思想