鱼C论坛

 找回密码
 立即注册
查看: 1747|回复: 7

[已解决]构造函数与析构函数

[复制链接]
发表于 2023-6-9 10:19:49 | 显示全部楼层 |阅读模式
3鱼币
可以帮我简单讲一下构造函数与析构函数吗(能让我简单会用就可以)谢谢谢谢非常感谢
最佳答案
2023-6-9 10:19:50
当然,我很愿意帮你解释C++中的构造函数和析构函数的基本概念。

首先,让我们来了解一下什么是构造函数。

构造函数是一种特殊的函数,用于初始化类的对象。其名称与类的名称相同,没有返回类型,并且可以有默认的参数。在创建类的对象时,构造函数会自动调用。

例如,假设我们有一个名为 "Student" 的类,它有一个构造函数,可以接受一个名字作为参数:

  1. class Student {
  2. public:
  3.   // 构造函数
  4.   Student(string name) {
  5.     this->name = name;
  6.   }

  7. private:
  8.   string name;
  9. };
复制代码


然后,我们可以这样创建一个新的 "Student" 对象:

  1. Student s("Tom");
复制代码


接下来,让我们看看什么是析构函数。

析构函数也是一种特殊的函数,用于销毁类的对象。其名称与类名相同,前面有一个波浪符 "~",并且没有参数或返回类型。当类的对象超出其作用范围或被明确删除时,析构函数会自动调用。

还是以 "Student" 类为例,我们可以定义一个析构函数:

  1. class Student {
  2. public:
  3.   // 构造函数
  4.   Student(string name) {
  5.     this->name = name;
  6.   }

  7.   // 析构函数
  8.   ~Student() {
  9.     cout << "Student " << name << " is being deleted." << endl;
  10.   }

  11. private:
  12.   string name;
  13. };
复制代码


当我们创建一个新的 "Student" 对象,并在之后的某个时间点删除它时:

  1. {
  2.   Student s("Tom");
  3. } // s 超出了作用范围,将被销毁
复制代码


在对象  s  被销毁的时候,析构函数会被调用,并打印出 "Student Tom is being deleted."。

最佳答案

查看完整内容

当然,我很愿意帮你解释C++中的构造函数和析构函数的基本概念。 首先,让我们来了解一下什么是构造函数。 构造函数是一种特殊的函数,用于初始化类的对象。其名称与类的名称相同,没有返回类型,并且可以有默认的参数。在创建类的对象时,构造函数会自动调用。 例如,假设我们有一个名为 "Student" 的类,它有一个构造函数,可以接受一个名字作为参数: 然后,我们可以这样创建一个新的 "Student" 对象: ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 10:19:50 | 显示全部楼层    本楼为最佳答案   
当然,我很愿意帮你解释C++中的构造函数和析构函数的基本概念。

首先,让我们来了解一下什么是构造函数。

构造函数是一种特殊的函数,用于初始化类的对象。其名称与类的名称相同,没有返回类型,并且可以有默认的参数。在创建类的对象时,构造函数会自动调用。

例如,假设我们有一个名为 "Student" 的类,它有一个构造函数,可以接受一个名字作为参数:

  1. class Student {
  2. public:
  3.   // 构造函数
  4.   Student(string name) {
  5.     this->name = name;
  6.   }

  7. private:
  8.   string name;
  9. };
复制代码


然后,我们可以这样创建一个新的 "Student" 对象:

  1. Student s("Tom");
复制代码


接下来,让我们看看什么是析构函数。

析构函数也是一种特殊的函数,用于销毁类的对象。其名称与类名相同,前面有一个波浪符 "~",并且没有参数或返回类型。当类的对象超出其作用范围或被明确删除时,析构函数会自动调用。

还是以 "Student" 类为例,我们可以定义一个析构函数:

  1. class Student {
  2. public:
  3.   // 构造函数
  4.   Student(string name) {
  5.     this->name = name;
  6.   }

  7.   // 析构函数
  8.   ~Student() {
  9.     cout << "Student " << name << " is being deleted." << endl;
  10.   }

  11. private:
  12.   string name;
  13. };
复制代码


当我们创建一个新的 "Student" 对象,并在之后的某个时间点删除它时:

  1. {
  2.   Student s("Tom");
  3. } // s 超出了作用范围,将被销毁
复制代码


在对象  s  被销毁的时候,析构函数会被调用,并打印出 "Student Tom is being deleted."。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-9 17:30:02 | 显示全部楼层
isdkz 发表于 2023-6-9 10:23
当然,我很愿意帮你解释C++中的构造函数和析构函数的基本概念。

首先,让我们来了解一下什么是构造函数 ...

this->name这个是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 17:32:29 | 显示全部楼层
tttttt@@@@@@ 发表于 2023-6-9 17:30
this->name这个是什么意思

在C++中, this  是一个指针,它指向当前对象。使用  this  可以访问当前对象的成员。

在你的例子中, this->name  是用来访问当前对象的  name  成员的。 this->name = name  是将传入构造函数的  name  参数赋值给当前对象的  name  成员。

假设我们有这样一个例子:

  1. class Student {
  2. public:
  3.   // 构造函数
  4.   Student(string name) {
  5.     this->name = name; // 使用 'this' 访问当前对象的 'name' 成员,并将其设置为参数 'name'
  6.   }

  7. private:
  8.   string name;
  9. };
复制代码


当你创建一个新的  Student  对象,例如  Student s("Tom") ,那么  this->name = name  实际上就是  s.name = "Tom" 。

使用  this  指针是一种好的编程习惯,它可以清晰地区分出哪些是类的成员,哪些是局部变量或参数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-9 18:01:17 | 显示全部楼层
isdkz 发表于 2023-6-9 17:32
在C++中, this  是一个指针,它指向当前对象。使用  this  可以访问当前对象的成员。

在你的例子中, ...

在这个代码当中为什么没有成员变量啊,可以把构造函数改成Student(string StudentName){name=StudentName;}这样吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 18:03:05 | 显示全部楼层
tttttt@@@@@@ 发表于 2023-6-9 18:01
在这个代码当中为什么没有成员变量啊,可以把构造函数改成Student(string StudentName){name=StudentNam ...

当然可以。在你的例子中, StudentName  是传入构造函数的参数, name  是类的成员变量。 name = StudentName;  会将参数的值赋给成员变量。这是一种非常常见的做法,用于从外部为类的私有成员变量赋值。

下面是完整的代码:

  1. class Student {
  2. public:
  3.   // 构造函数
  4.   Student(string StudentName) {
  5.     name = StudentName;  // 使用传入的参数给成员变量赋值
  6.   }

  7. private:
  8.   string name;  // 这是一个私有的成员变量
  9. };
复制代码


你可以这样创建一个新的  Student  对象:

  1. Student s("Tom");  // 创建一个名为 "Tom" 的学生
复制代码


在这个例子中,构造函数将会把 "Tom" 这个值赋给  name  成员变量。因此,这个  Student  对象的  name  成员变量将被设置为 "Tom"。

这里需要注意,类的成员变量通常会在类的声明中定义,就像  string name;  一样。在类的方法中,包括构造函数,可以使用这些成员变量。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-9 18:16:39 | 显示全部楼层
isdkz 发表于 2023-6-9 18:03
当然可以。在你的例子中, StudentName  是传入构造函数的参数, name  是类的成员变量。 name = Student ...

那对于公开的成员变量也可以用上面两种方法进行赋值吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 18:43:39 | 显示全部楼层
tttttt@@@@@@ 发表于 2023-6-9 18:16
那对于公开的成员变量也可以用上面两种方法进行赋值吗

是的,无论是公有(public)还是私有(private)的成员变量,你都可以在构造函数中进行初始化。这是因为构造函数是类的一部分,因此它可以访问类的所有成员变量,无论它们的访问修饰符是什么。

例如,你可以有这样一个类,它有一个公有的成员变量:

  1. class Student {
  2. public:
  3.   // 公有成员变量
  4.   string name;

  5.   // 构造函数
  6.   Student(string StudentName) {
  7.     name = StudentName;  // 使用传入的参数给成员变量赋值
  8.   }
  9. };
复制代码


在这个例子中,你也可以在构造函数中为  name  成员变量赋值。同时,因为  name  是公有的,你还可以在类的对象外部访问和修改它:

  1. Student s("Tom");  // 创建一个名为 "Tom" 的学生
  2. cout << s.name;  // 输出 "Tom"
  3. s.name = "Jerry";  // 更改学生的名字
  4. cout << s.name;  // 输出 "Jerry"
复制代码


然而,如果一个成员变量是私有的,那么它只能在类的内部访问,无法在类的对象外部访问或修改。这是一种重要的封装机制,用于保护数据不被外部代码错误地修改。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 02:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表