鱼C论坛

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

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

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

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

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

例如,假设我们有一个名为 "Student" 的类,它有一个构造函数,可以接受一个名字作为参数:
class Student {
public:
  // 构造函数
  Student(string name) {
    this->name = name;
  }

private:
  string name;
};

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

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

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

还是以 "Student" 类为例,我们可以定义一个析构函数:
class Student {
public:
  // 构造函数
  Student(string name) {
    this->name = name;
  }

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

private:
  string name;
};

当我们创建一个新的 "Student" 对象,并在之后的某个时间点删除它时:
{
  Student s("Tom");
} // s 超出了作用范围,将被销毁

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

最佳答案

查看完整内容

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

使用道具 举报

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

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

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

例如,假设我们有一个名为 "Student" 的类,它有一个构造函数,可以接受一个名字作为参数:
class Student {
public:
  // 构造函数
  Student(string name) {
    this->name = name;
  }

private:
  string name;
};

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

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

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

还是以 "Student" 类为例,我们可以定义一个析构函数:
class Student {
public:
  // 构造函数
  Student(string name) {
    this->name = name;
  }

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

private:
  string name;
};

当我们创建一个新的 "Student" 对象,并在之后的某个时间点删除它时:
{
  Student s("Tom");
} // s 超出了作用范围,将被销毁

在对象  s  被销毁的时候,析构函数会被调用,并打印出 "Student Tom is being deleted."。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

this->name这个是什么意思
想知道小甲鱼最近在做啥?请访问 -> 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  成员。

假设我们有这样一个例子:
class Student {
public:
  // 构造函数
  Student(string name) {
    this->name = name; // 使用 'this' 访问当前对象的 'name' 成员,并将其设置为参数 'name'
  }

private:
  string name;
};

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

使用  this  指针是一种好的编程习惯,它可以清晰地区分出哪些是类的成员,哪些是局部变量或参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

在你的例子中, ...

在这个代码当中为什么没有成员变量啊,可以把构造函数改成Student(string StudentName){name=StudentName;}这样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

下面是完整的代码:
class Student {
public:
  // 构造函数
  Student(string StudentName) {
    name = StudentName;  // 使用传入的参数给成员变量赋值
  }

private:
  string name;  // 这是一个私有的成员变量
};

你可以这样创建一个新的  Student  对象:
Student s("Tom");  // 创建一个名为 "Tom" 的学生

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

这里需要注意,类的成员变量通常会在类的声明中定义,就像  string name;  一样。在类的方法中,包括构造函数,可以使用这些成员变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

那对于公开的成员变量也可以用上面两种方法进行赋值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

例如,你可以有这样一个类,它有一个公有的成员变量:
class Student {
public:
  // 公有成员变量
  string name;

  // 构造函数
  Student(string StudentName) {
    name = StudentName;  // 使用传入的参数给成员变量赋值
  }
};

在这个例子中,你也可以在构造函数中为  name  成员变量赋值。同时,因为  name  是公有的,你还可以在类的对象外部访问和修改它:
Student s("Tom");  // 创建一个名为 "Tom" 的学生
cout << s.name;  // 输出 "Tom"
s.name = "Jerry";  // 更改学生的名字
cout << s.name;  // 输出 "Jerry"

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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