C++构造函数超通俗讲解:5种构造函数一文搞定(极简版)

📑 目录

  1. 构造函数基础概念

  2. 无参构造函数

  3. 有参构造函数

  4. 拷贝构造(深浅拷贝核心)

  5. 移动构造、委托构造

  6. 初始化列表

  7. 知识点总结


一、什么是构造函数?

1. 作用

创建对象时自动调用,用来给对象的成员变量初始化,不用我们手动赋值。

2. 硬性规则(必记)

  1. 函数名和类名一模一样

  2. 没有返回值,连void都不能写

  3. 支持重载,一个类可以写多个构造函数


二、无参构造函数

1. 默认无参构造

如果我们不写任何构造函数,编译器会自动生成一个空的无参构造,但是不会给变量赋值

2. 自定义无参构造(常用)

#include <iostream>
#include <string>
using namespace std;

class Person
{
public:
    int age;
    string name;
    // 无参构造
    Person()
    {
        age = 18;
        name = "路人";
    }
};

int main()
{
    Person p; // 自动调用无参构造
    cout << p.age << " " << p.name;
    return 0;
}

关键提醒:只要手写了任意一个构造函数,编译器就不会再提供默认无参构造!


三、有参构造函数

无参构造只能固定赋值,有参构造可以灵活传入参数初始化对象,日常开发最常用。

class Person
{
public:
    int age;
    string name;
    // 无参构造
    Person()
    {
        age = 18;
    name = "路人";
    }
    // 有参构造
    Person(int a, string n)
    {
        age = a;
        name = n;
    }
};

int main()
{
    Person p1;         // 无参构造
    Person p2(20,"张三");// 有参构造
    return 0;
}

四、拷贝构造函数(重点:深浅拷贝)

1. 作用

用一个已存在的对象,复制出一个新对象。语法固定:类名(const 类名& 变量)

2. 浅拷贝(默认自带,有坑)

编译器默认浅拷贝:直接复制内存地址。如果类中有指针,会出现内存重复释放,程序崩溃

3. 深拷贝(解决崩溃问题)

重新开辟一块新内存,两个对象内存互相独立,互不影响。

class Person
{
public:
    int age;
    int* height;

    // 有参构造
    Person(int a, int h)
    {
        age = a;
        height = new int(h);
    }

    // 深拷贝构造
    Person(const Person& p)
    {
        age = p.age;
        height = new int(*p.height); // 重新开内存
    }

    // 析构函数
    ~Person()
    {
        delete height;
    }
};

口诀:有指针必写深拷贝,无指针浅拷贝够用


五、移动构造 & 委托构造(极简了解)

1. 移动构造(C++11)

针对临时对象,不复制内存,直接转移内存所有权,提升程序运行效率,优化拷贝性能。

2. 委托构造

一个构造函数调用同类其他构造函数,减少重复代码,代码更简洁。

class Person
{
public:
    int age;
    // 基础构造
    Person(int a):age(a){}
    // 委托构造,复用上方代码
    Person():Person(18){}
};

六、初始化列表(推荐写法)

初始化成员变量优先级高于函数体,效率更高,const成员、引用成员只能用初始化列表初始化。

class Person
{
public:
    // 初始化列表直接初始化
    Person():age(18){}
    int age;
};

七、全文极简总结

  1. 无参构造:默认自动生成,手写构造后失效

  2. 有参构造:灵活初始化,项目最常用

  3. 拷贝构造:有指针必须手写深拷贝,防止程序崩溃

  4. 移动构造:优化临时对象拷贝效率

  5. 委托构造:减少代码冗余

  6. 初始化列表:构造函数最优初始化方式


下期分享:析构函数详解 + 构造析构调用顺序,零基础轻松吃透C++对象生命周期✨****
本篇由Ai生成,请理性参考

posted @ 2026-06-21 13:57  命题逻辑  阅读(3)  评论(0)    收藏  举报