【C++基础】类的构造函数和析构函数

目录

构造函数(Constructor)

定义

种类

1.默认构造函数

2.带参数的构造函数

3.浅拷贝构造函数

4.深拷贝构造函数

深拷贝和浅拷贝的区别

5.移动构造函数

析构函数(Destructor)

构造函数与析构函数的调用时机

构造函数:

析构函数:

构造函数和析构函数的最佳实践

避免在析构函数中抛出异常:

使用 noexcept 标记移动构造函数:

正确使用深拷贝和浅拷贝:


如需咨询请添加个人微信:a15135158368

欢迎叨扰,多多交流


构造函数和析构函数是类的特殊成员函数,用于管理对象的生命周期。

构造函数(Constructor)

定义

构造函数 是一个在对象创建时自动调用的函数,用于初始化对象的成员变量。

构造函数的名称必须与类名相同,且没有返回类型(不包括 void)。

种类

构造函数可以是默认构造函数、带参数的构造函数、拷贝构造函数或移动构造函数。

1.默认构造函数

定义:不接受任何参数的构造函数。

如果你没有为类定义任何构造函数,编译器会自动生成一个默认构造函数。

作用:用于在对象创建时进行默认初始化。

#include <iostream>
#include <string>
​
class MyClass
{
public:
    int id;
    std::string name;
​
    // 默认构造函数
    MyClass()
    {
        id = 0;
        name = "Unnamed";
        std::cout << "Default constructor called" << std::endl;
    }
​
    // 方法:显示对象的内容
    void display() const
    {
        std::cout << "ID: " << id << ", Name: " << name << std::endl;
    }
};
​
int main()
{
    // 创建对象时调用默认构造函数
    MyClass obj;
​
    // 显示对象的内容
    obj.display();
​
    return 0;
}

2.带参数的构造函数

定义:接受参数的构造函数,用于根据提供的值初始化对象的成员变量。

作用:允许在对象创建时传递参数来初始化对象。

#include <iostream>
#include <string>
​
class MyClass 
{
public:
    int x;           // 用于存储一个整数
    std::string name;  // 用于存储一个名称
​
    // 带参数的构造函数
        //【 x(val), name(str)】成员变量将传入的参数直接赋值给x
    MyClass(int val, const std::string& str) : x(val), name(str) 
    {
        std::cout << "Parameterized constructor called" << std::endl;
    }
​
    // 显示对象的内容
    void display() const 
    {
        std::cout << "x: " << x << ", Name: " << name << std::endl;
    }
};
​
int main()
{
    // 创建对象时传递参数,调用带参数的构造函数
    MyClass obj(42, "Example");
​
    // 显示对象的内容
    obj.display();
​
    return 0;
}
​
 
//---------------------------------------------------------------------------
// 结果:
//      Parameterized constructor called
//      x: 42, Name: Example
//---------------------------------------------------------------------------

3.浅拷贝构造函数

仅仅复制对象的表面,就是对象变量的值。

当指针和引用类型的成员变量,仅复制值,而不复制实际内存内容.

#include <iostream>
​
class MyClass {
public:
    int* data;
​
    // 构造函数:为指针分配内存并初始化数据
    MyClass(int value) {
        data = new int(value);
        std::cout << "构造函数:分配内存并设置值" << *data << std::endl;
    }
​
    // 浅拷贝构造函数
    MyClass(const MyClass& obj) {
        data = obj.data; // 仅复制指针的值,两个对象将共享同一块内存
        std::cout << "浅拷贝构造函数:复制指针,值为 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值