构造函数与析构函数

本文详细介绍了C++中的构造函数和析构函数,包括它们的作用、如何在对象创建和销毁时自动调用、无参和带参构造函数的区别,以及析构函数在内存管理中的角色。
摘要由CSDN通过智能技术生成

构造函数与析构函数

接着上一篇OOP基础概念来讲,我们声明对象的时候,要先写一个类(用struct或者class都可以实现,不过由于多方面原因,我们选用class)

例如实现一个学生类,并声明对象张三

class Student{
  private:
    int age;
    char name[20];
};

int main(){
    Student zhangsan;
    return 0;
}

此时,我们发现,虽然说我们已经声明了一个对象,但是我们并没有办法得知创建是否成功,也没有办法对对象进行初始化,这个时候就要用到我们的构造函数了。

构造函数(Constructor)

构造函数是一种特殊的函数,它的名字与类名相同。它在对象创建时自动调用,用于初始化对象的成员变量。构造函数没有返回类型,即使是void也不需要写。

#include<iostream>
#include<cstring> // 用于字符串处理
using namespace std;

class Student {
private:
    int age;
    char name[20];
public:
    // 无参构造函数
    Student() {
        cout << "学生对象被创建" << endl;
    }

    // 带参构造函数
    Student(int studentAge, const char* studentName) {
        age = studentAge;

        // 复制字符串到 name
        strncpy(name, studentName, sizeof(name) - 1);
        name[sizeof(name) - 1] = '\0'; // 确保字符串以 null 结尾

        cout << "学生对象被创建,年龄:" << age << ",姓名:" << name << endl;
    }
};

int main() {
    // 调用无参构造函数
    Student alice;

    // 调用带参构造函数
    Student bob(20, "Bob");

    return 0;
}

在这个例子中,Student 类有一个简单的不含参数的构造函数,当你创建一个Student对象时,构造函数会输出一条消息,表示对象已被创建。同时,还有一个含有参数的构造函数,我们调用它的时候可以直接对这个对象的属性赋值,以达到初始化的目的。

在这里强调一点,C++中,如果你没有提供任何构造函数(无参或带参)的定义,编译器将会为你的类生成一个默认构造函数。默认构造函数是一个没有任何参数的构造函数,它被用于创建对象而不需要提供任何初始值。但是,如果你提供了任何自定义构造函数,编译器就不再自动生成默认构造函数。

析构函数(Destructor)

我们在学习C语言的时候学过malloc申请内存之后要使用free来释放,在C++之中变成了new申请内存,delete释放。那么对于一个对象来说是一样的,当我们使用构造函数创建了一个对象的时候,也需要释放这个对象的内存,我们可以通过使用析构函数来实现这个功能。

析构函数也是一个特殊的函数,用于在对象销毁时执行一些清理工作。它的名字是在类名前加上波浪号 ~。

#include <iostream>
using namespace std;
class Student {
public:
    // 构造函数
    Student() {
 	cout << "making" << endl;
    }
// 析构函数
~Student() {
    cout << "delete" << endl;
}
};

int main(){
    Student zhangsan;    // 创建学生对象,构造函数被调用
    return 0;	     	// 对象超出作用域,析构函数被调用
}

在main函数中,我们创建了一个Student对象,构造函数被调用。当main函数结束时,alice对象超出作用域,析构函数被调用。
构造函数和析构函数是面向对象编程中重要的概念,它们确保对象在创建和销毁时都经过适当的处理。这是使C++代码更有条理和可维护性的关键元素。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值