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

C++ 构造函数

构造函数是 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++ 数据类型,包括基本类型、自定义类对象和指针。

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;
}

拷贝构造函数

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

c 复制代码
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;
}

移动构造函数

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

c 复制代码
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++ 代码。

文章转载自: 小万哥丶

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

体验地址: www.jnpfsoft.com/?from=xitu

相关推荐
CSDN_RTKLIB4 分钟前
CMake构建目标核心命令
c++
郝学胜-神的一滴5 分钟前
图形学中的纹理映射问题:摩尔纹与毛刺的深度解析
c++·程序人生·unity·游戏引擎·图形渲染·unreal engine
Cx330❀24 分钟前
【优选算法必刷100题】第43题(模拟):数青蛙
c++·算法·leetcode·面试
闻缺陷则喜何志丹24 分钟前
【C++动态规划 状压dp】1879. 两个数组最小的异或值之和|2145
c++·算法·动态规划·力扣·数组·最小·动态规范
艾莉丝努力练剑29 分钟前
【优选算法必刷100题:专题五】(位运算算法)第033~38题:判断字符是否唯一、丢失的数字、两整数之和、只出现一次的数字 II、消失的两个数字
java·大数据·运维·c++·人工智能·算法·位运算
xiaolongmeiya1 小时前
P7082 [NWRRC 2013] Dwarf Tower 完全背包
c++
2401_876221341 小时前
因数个数、因数和、因数积
c++·算法
十五年专注C++开发1 小时前
VS2019编译的C++程序,在win10正常运行,在win7上Debug正常运行,Release运行报错0xC0000005,进不了main函数
开发语言·c++·报错c0x0000005
fy zs1 小时前
网络编程套接字
linux·服务器·网络·c++
fpcc1 小时前
模板编程—模板和元编程中的错误输出
c++·模板编程