30利用构造函数对类对象进行初始化

简介: 30利用构造函数对类对象进行初始化

C++入门——60s从0到1

利用构造函数对类对象进行初始化

 

构造函数是类的一种特殊函数,用于在创建对象时对对象进行初始化。在C++中,每个类都可以定义一个或多个构造函数,这些构造函数具有相同的名字但参数列表可以不同。在创建对象时,编译器会根据传入的实参列表来选择合适的构造函数进行调用。

 

构造函数的语法如下:

 

class ClassName {

 public:

   // 构造函数声明

   ClassName(parameter_list);

   // ...

};

 

其中,`ClassName`是类名,`parameter_list`是构造函数的参数列表,可以包含零个或多个参数。在函数体内部,可以对对象的成员变量进行初始化。

 

下面是一个简单的示例:

 

#include <iostream>

using namespace std;

 

class Person {

 public:

   // 构造函数

   Person(string name, int age) {

     this->name = name;

     this->age = age;

   }

 private:

   string name;

   int age;

};

 

int main() {

 Person p1("Tom", 20);

 Person p2("Alice", 25);

 cout << p1.name << " is " << p1.age << " years old." << endl;

 cout << p2.name << " is " << p2.age << " years old." << endl;

 return 0;

}

 

在上面的代码中,我们定义了一个名为`Person`的类,该类有两个私有成员变量`name`和`age`。我们还定义了一个构造函数,该函数接受两个参数`name`和`age`,并将它们分别赋值给对应的私有成员变量。在`main()`函数中,我们创建了两个对象`p1`和`p2`,并分别传入了相应的参数。最后,我们输出了这两个对象的属性值。

 

除了普通的构造函数外,C++还支持一些特殊的构造函数,包括默认构造函数、拷贝构造函数和移动构造函数。下面分别介绍一下它们的特点和使用方法。

 

默认构造函数

 

默认构造函数是一种没有参数的构造函数,它的语法如下:

 

ClassName();

 

在创建对象时,如果没有任何参数传递给构造函数,编译器会自动调用默认构造函数进行初始化。例如:

 

#include <iostream>

using namespace std;

 

class MyClass {

 public:

   MyClass() { cout << "Default constructor called." << endl; }

};

 

int main() {

 MyClass obj1; // 调用默认构造函数

 MyClass obj2(42); // 调用带参数的构造函数

 return 0;

}

 

在上面的代码中,我们定义了一个名为`MyClass`的类,该类有一个默认构造函数。在`main()`函数中,我们创建了两个对象`obj1`和`obj2`,其中`obj1`调用了默认构造函数,而`obj2`调用了带参数的构造函数。

 

拷贝构造函数

 

拷贝构造函数是一种特殊的构造函数,用于将一个对象初始化为另一个对象的副本。它的语法如下:

 

ClassName(const ClassName& other);

 

其中,`const ClassName& other`表示一个引用类型的参数,它将引用另一个已经存在的对象。在函数体内部,可以使用该引用对当前对象的成员变量进行初始化。例如:

 

#include <iostream>
using namespace std;
 
class MyClass {
  public:
    // 拷贝构造函数
    MyClass(const MyClass& other) {
      cout << "Copy constructor called." << endl;
      x = other.x;
      y = other.y;
    }
  private:
    int x;
    int y;
};
 
int main() {
  MyClass obj1(42, 33); // 创建一个新对象并初始化
  MyClass obj2 = obj1; // 使用拷贝构造函数复制obj1到obj2中
  return 0;
}

 

在上面的代码中,我们定义了一个名为`MyClass`的类,该类有两个私有成员变量`x`和`y`。我们还定义了一个拷贝构造函数,该函数将另一个对象的属性值复制到当前对象中。在`main()`函数中,我们创建了一个新对象`obj1`并对其进行了初始化,然后使用拷贝构造函数将它的属性值复制到了另一个对象`obj2`中。需要注意的是,这里的赋值符号是等号而不是冒号。因为这里不是将obj1作为一个临时量来初始化obj2,而是将obj1作为一个完整的对象来复制给obj2。

目录
相关文章
|
6月前
|
存储 Cloud Native 编译器
C++ 对象生成:构造函数
C++ 对象生成:构造函数
|
4天前
|
编译器 C#
C#构造函数详解
C#构造函数详解
12 0
|
4天前
|
编译器 C语言 C++
你想对构造函数说些什么?
你想对构造函数说些什么?
|
6月前
|
JavaScript 前端开发
构造函数。
构造函数。
19 1
|
10月前
|
安全 C#
C#视频之构造函数
C#视频之构造函数
46 0
|
11月前
|
编译器 C语言 C++
C嘎嘎~~[构造函数提升篇]
C嘎嘎~~[构造函数提升篇]
|
11月前
|
Java 编译器
[构造函数]构造函数是如何产生的?
[构造函数]构造函数是如何产生的?
构造函数
构造函数
44 1
|
编译器
类的构造函数
类的构造函数
132 0