C++中的构造函数和析构函数是什么,如何使用它们?

我想请教一下C++中的构造函数和析构函数是什么,以及如何使用它们。我知道构造函数是在对象创建时执行的函数,用于初始化对象的数据成员,而析构函数是在对象被删除或超出作用域时执行的函数,用于清理对象的资源。但是我不太清楚如何定义和调用它们,以及在什么情况下应该使用它们。如果有相关的示例代码可以说明,那就更好了。希望有经验的老师可以为我解答这些问题,谢谢!

提问时间:2023-06-14 07:41:51 编辑时间:2023-06-14 07:41:53 提问者: 灵魂逐梦
  • Galaxy_Gladiator
    10

    构造函数是在对象创建时自动调用的函数,用于初始化对象的成员变量。构造函数的名称必须与类名相同,不需要指定返回类型,可以重载,可以带参数。示例代码如下:

    class Point {
    public:
        Point() {  // 默认构造函数
            x_ = y_ = 0;
        }
        Point(int x, int y) {  // 带参数的构造函数
            x_ = x;
            y_ = y;
        }
        ~Point() {  // 析构函数
            cout << "Point destructor is called" << endl;
        }
    private:
        int x_, y_;
    };
    
    int main() {
        Point p1;  // 调用默认构造函数
        Point p2(1, 2);  // 调用带参数的构造函数
        return 0;
    }
    

    析构函数是在对象被删除或超出作用域时自动调用的函数,用于清理对象的资源。析构函数的名称必须与类名相同,以一个波浪线(~)开头。示例代码如下:

    class AutoFile {
    public:
        AutoFile(char* filename) {
            file_ = fopen(filename, "r");
            if (file_ == NULL) {
                cout << "Can't open file " << filename << endl;
                exit(-1);
            }
        }
        ~AutoFile() {
            fclose(file_);
        }
    private:
        FILE* file_;
    };
    
    int main() {
        AutoFile f("test.txt");  // 自动生成一个对象,并在作用域结束时自动调用析构函数释放文件资源
        return 0;
    }
    
    回答时间:2023-06-14 07:41:56