tttttt@@@@@@ 发表于 2023-6-9 10:18:19

能帮我通过举例讲一下c++中类的知识吗

有点不太会用

isdkz 发表于 2023-6-9 10:18:20

当然可以,让我们从创建一个基础的类开始。在C++中,类是一个定义一种特定类型的蓝图或模板。一个类定义了该类型的对象(也被称为类的实例)可以包含什么(数据成员),以及它可以做什么(成员函数或方法)。

我们可以以一个"Person"类为例子开始。这个类包含两个数据成员(姓名和年龄),以及一些成员函数用来操作这些数据。

class Person {
public: // 下面定义的是公开的成员变量和成员函数
    // 成员变量
    string name;
    int age;

    // 构造函数
    Person(string personName, int personAge) {
      name = personName;
      age = personAge;
    }

    // 成员函数
    void introduceSelf() {
      cout << "Hi, I'm " << name << " and I'm " << age << " years old." << endl;
    }
};


在这个例子中, Person是类的名字, name和age是数据成员, Person是构造函数,用于创建类的实例。 introduceSelf是成员函数,它让人物自我介绍。

要使用这个类,你可以创建一个Person对象,并调用它的introduceSelf方法,就像这样:

int main() {
    // 创建一个 Person 对象
    Person john("John Doe", 22);

    // 使用对象的 introduceSelf 方法
    john.introduceSelf();

    return 0;
}


当你运行这个程序,它将输出: "Hi, I'm John Doe and I'm 22 years old."这就是一个简单的类及其在C++中的应用示例。类提供了一种方法来封装数据和操作数据的函数,从而使你的代码更清晰、易读和易于维护。

tttttt@@@@@@ 发表于 2023-6-9 17:27:19

isdkz 发表于 2023-6-9 10:21
当然可以,让我们从创建一个基础的类开始。在C++中,类是一个定义一种特定类型的蓝图或模板。一个类定义了 ...

能不能问一下在执行john.introduceSelf();的执行顺序是什么

isdkz 发表于 2023-6-9 17:30:27

tttttt@@@@@@ 发表于 2023-6-9 17:27
能不能问一下在执行john.introduceSelf();的执行顺序是什么

执行john.introduceSelf();时,以下是步骤的概述:

1. 找到命名为 "john" 的Person类型对象。这个对象是在main函数中定义的。

2. 在找到的对象中查找名为 "introduceSelf" 的成员函数。

3. 执行找到的 "introduceSelf" 函数。这个函数没有参数,所以直接开始执行。

在introduceSelf函数中:

1. 打开输出流cout ,准备将输出发送到标准输出(通常是终端或命令行窗口)。

2. 输出字符串 "Hi, I'm "。注意,这个字符串后面没有换行符,所以接下来的输出会在同一行。

3. 输出对象 "john" 的 "name" 成员的值,即 "John Doe"。

4. 输出字符串 " and I'm "。同样,这个字符串后面没有换行符。

5. 输出对象 "john" 的 "age" 成员的值,即 22。

6. 输出字符串 " years old." 和一个换行符。这样,下一次的输出将从新的一行开始。

7. 以上所有输出都将连接在一起,并且按照它们出现的顺序发送到标准输出。

所以,整个输出是 "Hi, I'm John Doe and I'm 22 years old.",然后是一个换行。

tttttt@@@@@@ 发表于 2023-6-9 17:56:55

isdkz 发表于 2023-6-9 17:30
执行john.introduceSelf();时,以下是步骤的概述:

1. 找到命名为 "john" 的Person类型对象。 ...

也就是说成员函数是用来执行的,成员变量是进行初始化的,那构造函数的作用在哪呢

isdkz 发表于 2023-6-9 18:00:12

tttttt@@@@@@ 发表于 2023-6-9 17:56
也就是说成员函数是用来执行的,成员变量是进行初始化的,那构造函数的作用在哪呢

是的,你的理解是正确的。成员函数用于执行操作(包括对成员变量进行操作),成员变量是用来存储类的状态或者属性的。现在让我们来谈谈构造函数。

构造函数是一种特殊的成员函数,其名称与类的名称相同,用于初始化类的对象。构造函数在创建对象时被自动调用,常常用于为成员变量设置初始值,或者执行任何其他设置或初始化工作。

在我们的Person类例子中,构造函数如下所示:

    Person(string personName, int personAge) {
      name = personName;
      age = personAge;
    }


这个构造函数接受两个参数:一个string和一个int 。在构造函数内部,它将这些参数赋值给相应的成员变量。因此,当你创建一个Person类型的对象时,你需要提供这两个参数:

    Person john("John Doe", 22);


在这行代码中, Person构造函数被调用,并且"John Doe"和22作为参数传入。这些参数的值被分别赋给john对象的name和age成员变量。

所以,简单来说,构造函数的主要目的是初始化对象的状态。

tttttt@@@@@@ 发表于 2023-6-9 18:04:15

isdkz 发表于 2023-6-9 18:00
是的,你的理解是正确的。成员函数用于执行操作(包括对成员变量进行操作),成员变量是用来存储类的状态 ...

但是这两个参数在成员变量中已经定义了,那Person(string personName, int personAge) {
      name = personName;age = personAge; }这个构造函数的作用主要是干嘛呢

isdkz 发表于 2023-6-9 18:12:19

tttttt@@@@@@ 发表于 2023-6-9 18:04
但是这两个参数在成员变量中已经定义了,那Person(string personName, int personAge) {
      name = ...

在C++中,成员变量的定义只是声明了它们的类型和名称,并不会赋予它们实际的值。当我们创建一个类的对象时,我们需要提供一种方式来初始化这些成员变量。这就是构造函数的用处。

构造函数允许我们在创建对象时对成员变量进行初始化。在构造函数内部,我们使用传入的参数来给成员变量赋初值。例如,在我们的Person类中,构造函数接收两个参数personName和personAge ,并将它们的值赋给name和age 。

当我们这样做时:

Person john("John Doe", 22);


我们实际上是在做以下几件事情:

1. 创建一个Person类型的对象john 。
2. 调用Person类的构造函数,将"John Doe"和22作为参数传入。
3. 在构造函数内部, "John Doe"被赋值给john对象的name成员变量, 22被赋值给john对象的age成员变量。

通过这种方式,我们可以确保每个Person对象在创建时都已经有了一个name和一个age ,并且我们知道这两个值是什么。否则, name和age就会是未定义的,使用它们可能会导致错误。

tttttt@@@@@@ 发表于 2023-6-9 18:22:35

isdkz 发表于 2023-6-9 18:12
在C++中,成员变量的定义只是声明了它们的类型和名称,并不会赋予它们实际的值。当我们创建一个类的对象 ...

好的明白了谢谢谢谢
页: [1]
查看完整版本: 能帮我通过举例讲一下c++中类的知识吗