C++ 06:构造函数——对象初始化的核心指南
一、构造函数基础规则命名与返回值函数名与类名完全一致无返回值类型不能写void。自动调用创建对象时系统自动触发无需手动调用。默认构造未显式定义时编译器自动生成空默认构造仅分配内存成员值随机一旦自定义构造默认构造失效。访问权限通常定义为public保证外部可创建对象。基础示例#include iostream using namespace std; class Point { private: int x, y; public: // 自定义无参构造初始化成员 Point() { x 0; y 0; } void show() { cout ( x , y ) endl; } }; int main() { Point p; // 自动调用无参构造 p.show(); // 输出 (0,0) return 0; }二、构造函数重载与默认参数1. 构造函数重载通过参数列表不同实现重载提供多套初始化方案class Date { private: int year, month, day; public: // 无参构造 Date() { year 2024; month 4; day 21; } // 有参构造重载 Date(int y, int m, int d) { year y; month m; day d; } void show() { cout year - month - day endl; } }; // 调用示例 int main() { Date d1; // 无参构造2024-4-21 Date d2(2024, 4, 22); // 有参构造2024-4-22 return 0; }2. 默认参数构造参数列表指定默认值兼顾 “无参” 和 “有参” 场景// 全默认参数构造替代无参有参重载 class Date { private: int year, month, day; public: Date(int y2024, int m4, int d21) { year y; month m; day d; } void show() { cout year - month - day endl; } }; // 调用示例 int main() { Date d1; // 用默认值2024-4-21 Date d2(2024); // 部分传参2024-4-21 Date d3(2024,5); // 部分传参2024-5-21 return 0; }三、初始化列表进阶核心1. 核心优势初始化列表是更高效的成员初始化方式先于函数体执行且是const成员、引用成员的唯一初始化方式。2. 语法对比class Date { private: int year, month, day; const int VERSION; // const成员 public: // 传统方式函数体内赋值 // Date(int y, int m, int d) { yeary; monthm; dayd; } // 初始化列表推荐 Date(int y2024, int m4, int d21) : year(y), month(m), day(d), VERSION(1) {} void show() { cout year - month - day v VERSION endl; } };3. 执行规则成员初始化顺序由声明顺序决定与初始化列表顺序无关。四、对象的 5 种定义方式int main() { Date d1; // 无参/默认参数构造 Date d2(2024,4,22); // 直接传参 Date d3{2024,4,23}; // C11列表初始化推荐更安全 Date d4 Date(2024,4,24); // 传统赋值写法 Date* d5 new Date(2024,4,25); // 动态创建堆内存 d1.show(); d2.show(); d3.show(); d4.show(); d5-show(); delete d5; // 释放动态对象 return 0; }五、核心注意事项避免二义性不要同时定义无参构造和全默认参数构造。初始化优先级类内初始化值 初始化列表 函数体赋值实际开发优先用初始化列表。空指针安全动态创建对象后需用delete释放避免内存泄漏。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418812.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!