经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
来源:cnblogs  作者:小万哥丶  时间:2024/4/23 10:06:01  对本文有异议

C++ 构造函数

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

构造函数类型

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

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

默认构造函数

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

  1. class Person {
  2. public:
  3. string name;
  4. int age;
  5. Person() { // 默认构造函数
  6. name = "Unknown";
  7. age = 0;
  8. }
  9. };
  10. int main() {
  11. Person p1; // 创建 Person 对象
  12. cout << p1.name << ", " << p1.age << endl; // 输出:Unknown, 0
  13. return 0;
  14. }

带参数构造函数

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

  1. class Car {
  2. public:
  3. string brand;
  4. string model;
  5. int year;
  6. Car(string b, string m, int y) { // 带参数构造函数
  7. brand = b;
  8. model = m;
  9. year = y;
  10. }
  11. };
  12. int main() {
  13. Car car1("Ford", "Mustang", 1967); // 创建 Car 对象并传入参数
  14. cout << car1.brand << " " << car1.model << " " << car1.year << endl; // 输出:Ford Mustang 1967
  15. return 0;
  16. }

拷贝构造函数

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

  1. class Person {
  2. public:
  3. string name;
  4. int age;
  5. Person(const Person& other) { // 拷贝构造函数
  6. name = other.name;
  7. age = other.age;
  8. }
  9. };
  10. int main() {
  11. Person p1("Alice", 30); // 创建 Person 对象
  12. Person p2(p1); // 拷贝构造函数创建 p2
  13. cout << p2.name << ", " << p2.age << endl; // 输出:Alice, 30
  14. return 0;
  15. }

移动构造函数

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

  1. class Person {
  2. public:
  3. string name;
  4. int age;
  5. Person(Person&& other) { // 移动构造函数
  6. name = std::move(other.name);
  7. age = other.age;
  8. // 将 other 的资源转移到 this
  9. }
  10. };
  11. int main() {
  12. Person p1("Bob", 25); // 创建 Person 对象
  13. Person p2(std::move(p1)); // 移动构造函数创建 p2
  14. cout << p2.name << ", " << p2.age << endl; // 输出:Bob, 25
  15. cout << p1.name << ", " << p1.age << endl; // 输出:, 0 (p1 的资源已转移)
  16. return 0;
  17. }

构造函数的访问控制

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

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

总结

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

最后

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

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

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

原文链接:https://www.cnblogs.com/xiaowange/p/18151512

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号