📜  C++ |类和对象|问题5(1)

📅  最后修改于: 2023-12-03 14:59:48.130000             🧑  作者: Mango

C++ | 类和对象 | 问题5

在C++中,类是一种用户自定义的数据类型,用于封装数据和方法。对象是类的一个实例,可以使用类的方法来访问和操作对象的数据。

在本问题中,我们将学习C++类和对象的一些基本知识和用法。

创建类和对象

我们可以使用class关键字来定义一个类。类包含成员变量和成员函数(也称为方法)。例如:

class Person {
public:
    string name;
    int age;
    void sayHello();
};

上面的代码定义了一个Person类,其中包含了两个成员变量nameage,以及一个成员函数sayHello()

我们可以使用Person类创建一个对象。例如:

Person p;

p.name = "Alice";
p.age = 20;

p.sayHello();

上面的代码创建了一个名为pPerson对象,并设置了nameage属性。然后调用了sayHello()方法。

需要注意的是,当我们通过.操作符访问对象的成员变量和成员函数时,要使用对象的名称加上.和成员名。例如,p.name表示p对象的name属性。

访问控制修饰符

在定义类时,我们可以使用publicprivateprotected关键字来指定成员变量和成员函数的访问权限。

  • public:在类的内部和外部都可以访问。
  • private:只能在类的内部访问。
  • protected:只能在类的内部和其子类中访问。

例如:

class Person {
public:
    string name;
    int age;
    void sayHello();

private:
    string secret;

protected:
    void doSomething();
};

上面的代码中,nameagesayHello()方法是公共的,可以在类的外部访问。secret是私有的,只能在类的内部使用。doSomething()是受保护的,只能在类的内部和其子类中使用。

构造函数和析构函数

当我们创建一个对象时,会自动调用类的构造函数。构造函数用于初始化对象的成员变量。

如果我们在类中不定义构造函数,那么编译器会生成一个默认的构造函数。例如:

class Person {
public:
    string name;
    int age;
    void sayHello();
};

Person p; // 调用默认的构造函数

在上面的代码中,Person类没有定义自己的构造函数,因此编译器会生成一个默认的构造函数。当我们使用Person类创建一个对象时,会自动调用这个默认的构造函数。

如果我们希望自定义一个构造函数,可以在类中定义一个形如类名(参数列表)的函数。例如:

class Person {
public:
    string name;
    int age;
    void sayHello();

    Person(string n, int a) {
        name = n;
        age = a;
    }
};

Person p("Alice", 20); // 调用自定义的构造函数

上面的代码定义了一个带有两个参数的构造函数。当我们使用Person类创建一个对象时,会自动调用这个构造函数。

同样地,当对象被销毁时,会自动调用类的析构函数。析构函数用于清理对象的资源。例如:

class Person {
public:
    string name;
    int age;
    void sayHello();

    Person(string n, int a) {
        name = n;
        age = a;
        cout << "构造函数被调用" << endl;
    }

    ~Person() {
        cout << "析构函数被调用" << endl;
    }
};

{
    Person p("Alice", 20);
} // 调用析构函数

上面的代码定义了一个带有析构函数的Person类。当我们使用一个对象p时,会自动调用构造函数,并输出构造函数被调用。当p对象被销毁时,会自动调用析构函数,并输出析构函数被调用

需要注意的是,如果我们不定义析构函数,编译器会生成一个默认的析构函数。

将类定义在头文件中

当我们定义一个类时,可以将其定义在头文件中,以便在多个文件中使用。例如:

// Person.h
#pragma once

#include <string>

using namespace std;

class Person {
public:
    string name;
    int age;
    void sayHello();

    Person(string n, int a);
    ~Person();
};

// Person.cpp
#include <iostream>
#include "Person.h"

using namespace std;

void Person::sayHello() {
    cout << "Hello, my name is " << name << ", I'm " << age << " years old." << endl;
}

Person::Person(string n, int a) {
    name = n;
    age = a;
    cout << "构造函数被调用" << endl;
}

Person::~Person() {
    cout << "析构函数被调用" << endl;
}

上面的代码中,我们将Person类的定义和实现分别定义在了Person.hPerson.cpp文件中。要使用Person类,只需要在需要的文件中包含Person.h头文件即可。

总结

本问题介绍了C++类和对象的基本知识和用法,包括创建类和对象、访问控制修饰符、构造函数和析构函数,以及将类定义在头文件中。这些知识对于学习面向对象编程非常重要。