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;
}
构造函数的访问控制
构造函数的访问权限可以使用访问控制修饰符来控制,例如 public
、private
和 protected
。
public
:构造函数可以在类外部的任何地方调用。private
:构造函数只能在类的内部调用。protected
:构造函数可以在类的内部或其子类中调用。
总结
构造函数是 C++ 中重要的面向对象编程机制,用于初始化和管理对象的状态。通过理解不同类型的构造函数及其用法,您可以创建健壮且可维护的 C++ 代码。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容