C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造

小万哥
• 阅读 284

C++ 构造函数

构造函数是 C++ 中一种特殊的成员函数,当创建类对象时自动调用。它用于初始化对象的状态,例如为属性分配初始值。构造函数与类同名,且没有返回值类型。

构造函数类型

C++ 支持多种类型的构造函数,用于满足不同的初始化需求:

  • 默认构造函数: 不带参数的构造函数,通常用于初始化对象的默认状态。
  • 带参数构造函数: 允许传入参数来初始化对象的状态。
  • 拷贝构造函数: 用于从另一个已存在的对象创建新对象。
  • 移动构造函数: 用于从即将销毁的临时对象转移资源到新对象。

默认构造函数

默认构造函数是最简单的构造函数,不接受任何参数。它通常用于为对象的属性设置默认值,或者执行简单的初始化操作。

class Person {
public:
  string name;
  int age;

  Person() { // 默认构造函数
    name = "Unknown";
    age = 0;
  }
};

int main() {
  Person p1; // 创建 Person 对象
  cout << p1.name << ", " << p1.age << endl; // 输出:Unknown, 0

  return 0;
}

带参数构造函数

带参数构造函数允许传入参数来初始化对象的状态。参数可以是任何有效的 C++ 数据类型,包括基本类型、自定义类对象和指针。

class Car {
public:
  string brand;
  string model;
  int year;

  Car(string b, string m, int y) { // 带参数构造函数
    brand = b;
    model = m;
    year = y;
  }
};

int main() {
  Car car1("Ford", "Mustang", 1967); // 创建 Car 对象并传入参数
  cout << car1.brand << " " << car1.model << " " << car1.year << endl; // 输出:Ford Mustang 1967

  return 0;
}

拷贝构造函数

拷贝构造函数用于从另一个已存在的对象创建新对象。它通常用于复制另一个对象的属性值,而不共享原始对象的数据。

class Person {
public:
  string name;
  int age;

  Person(const Person& other) { // 拷贝构造函数
    name = other.name;
    age = other.age;
  }
};

int main() {
  Person p1("Alice", 30); // 创建 Person 对象
  Person p2(p1); // 拷贝构造函数创建 p2

  cout << p2.name << ", " << p2.age << endl; // 输出:Alice, 30

  return 0;
}

移动构造函数

移动构造函数用于从即将销毁的临时对象转移资源到新对象。它通常用于避免不必要的资源复制,并提高性能。

class Person {
public:
  string name;
  int age;

  Person(Person&& other) { // 移动构造函数
    name = std::move(other.name);
    age = other.age;

    // 将 other 的资源转移到 this
  }
};

int main() {
  Person p1("Bob", 25); // 创建 Person 对象

  Person p2(std::move(p1)); // 移动构造函数创建 p2

  cout << p2.name << ", " << p2.age << endl; // 输出:Bob, 25
  cout << p1.name << ", " << p1.age << endl; // 输出:, 0 (p1 的资源已转移)

  return 0;
}

构造函数的访问控制

构造函数的访问权限可以使用访问控制修饰符来控制,例如 publicprivateprotected

  • public:构造函数可以在类外部的任何地方调用。
  • private:构造函数只能在类的内部调用。
  • protected:构造函数可以在类的内部或其子类中调用。

总结

构造函数是 C++ 中重要的面向对象编程机制,用于初始化和管理对象的状态。通过理解不同类型的构造函数及其用法,您可以创建健壮且可维护的 C++ 代码。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
java13天
构造函数一个对象的建立,构造函数只运行一次。而一般方法可以被该对象调用多次。personp2newperson();//初始化构造函数p2.p2content();//调用函数的内容,可重复调用构造代码块中定义的是不同对象共性的初始化内容classtest{{System.out.prin
Wesley13 Wesley13
2年前
C++ 析构函数与内存池
CPrimer书中也提到编写class时要注意copycontrol成员(拷贝构造函数,赋值操作符,析构函数,C11又多个移动构造函数)。工作时在C和C之间切换,有时就忘记了C的细节(真的好讨厌)。C析构函数与构造函数对应,构造对象时调用构造函数,析构对象时调用析构函数,于是可以在对象的析构函数中释放资
Wesley13 Wesley13
2年前
C++中构造函数和析构函数
构造函数定义它是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。另外,一个类可以有多个构造函数,我们可以根据其参数个数的不同或参数类型的不同来区分它们(这就是构造函数的重载)特点1.构造函数的命名必须和类名完全相同;2.构造函数的功能主要用于在类的对象创建时定义
Wesley13 Wesley13
2年前
Java 构造方法
构造方法什么是构造方法:构造方法就是与类同名的那个方法且没有返回值。就是一个方法。有什么作用:就是初始化对象的成员变量,无参的构造方法,系统自动初始化。有参则根据你的要求初始化不同的类型,默认值如下:实例成员变量默认值:boolean:falsebyte:0short:0char:int:
Wesley13 Wesley13
2年前
C++ 类与结构体 构造函数 详细相关理解整理
说到构造函数,通常是将讲对象创建时编译器自动调用构造函数为对象初始化,也可以说是分配内存空间。 学习了构造函数相对其中牵涉到的一些点作下大概的了解和学习,整理一下只是点。这里主要说下 类与结构体的差异/类与结构体包含继承关系时的构造调用/类的初始化列表/默认构造函数/拷贝构造函数以及牵涉到的相关内容结构体和类的区别
Wesley13 Wesley13
2年前
C++构造函数详解(复制构造函数 也是 拷贝构造函数)
构造函数是干什么的该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员。构造函数的种类!复制代码(https://oscimg.oschina.net/oscnet/54a3f729e89451abb86a0bec4639
Wesley13 Wesley13
2年前
Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。构造函数publicHelloA(){//构造函数}关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造
Easter79 Easter79
2年前
Thinking in C++ Notes 拷贝构造函数
1.默认拷贝构造函数不会调用构造函数,而通过位拷贝来实现。2.可以使用多个构造函数,并使用默认参数。3.小心使用默认构造函数,当属性中有指针时,会造成多次析构而产生错误Reference:http://blog.csdn.net/lwbeyond/article/details/6202256(https://www.oschina
小万哥 小万哥
3个月前
C# 面向对象编程进阶:构造函数详解与访问修饰符应用
C构造函数构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值:示例获取您自己的C服务器创建一个构造函数:csharp//创建一个Car类classCarpublicstringmodel;//创
小万哥 小万哥
2个月前
Java 构造函数与修饰符详解:初始化对象与控制权限
Java构造函数Java构造函数是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。构造函数的作用:为对象的属性设置初始值执行必要的初始化操作提供创建对象的多种方式构造函数的类型:默认构造函数:无参数的构造函数,如果用户