news 2026/4/16 15:03:01

C++ 构造函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 构造函数

一、构造函数的核心定义

构造函数是 C++ 类中一种特殊的成员函数,它的名字和类名完全相同,没有返回值(连 void 都不需要写)。当你创建类的对象时,构造函数会自动被调用,主要用来完成对象的初始化工作(比如给成员变量赋值、分配内存等)。

简单来说,构造函数就像 “对象的出生初始化流程”—— 对象一创建,就自动执行这个函数,保证对象从创建之初就是一个合法、可用的状态。

二、构造函数的分类与用法

1. 默认构造函数

如果你的类中没有显式定义任何构造函数,编译器会自动生成一个无参的默认构造函数(空实现)。你也可以自己定义:

cpp

运行

#include <iostream> using namespace std; // 定义一个矩形类 class Rectangle { private: int width; // 宽度 int height; // 高度 public: // 1. 无参构造函数(默认构造函数) Rectangle() { width = 0; height = 0; cout << "无参构造函数被调用,矩形宽高初始化为0" << endl; } // 打印矩形信息 void showInfo() { cout << "矩形宽度:" << width << ",高度:" << height << endl; } }; int main() { // 创建对象时,自动调用无参构造函数 Rectangle rect1; rect1.showInfo(); // 输出:矩形宽度:0,高度:0 return 0; }
2. 带参数的构造函数

为了灵活初始化对象,你可以定义带参数的构造函数,创建对象时传入初始值:

cpp

运行

#include <iostream> using namespace std; class Rectangle { private: int width; int height; public: // 2. 带参数的构造函数 Rectangle(int w, int h) { width = w; height = h; cout << "带参数构造函数被调用" << endl; } void showInfo() { cout << "矩形宽度:" << width << ",高度:" << height << endl; } }; int main() { // 创建对象时传入参数,调用带参构造函数 Rectangle rect2(5, 3); rect2.showInfo(); // 输出:矩形宽度:5,高度:3 return 0; }
3. 拷贝构造函数

用于用一个已存在的对象,创建一个新的对象(相当于 “复制” 对象),格式固定:类名(const 类名& 已存在的对象名)

cpp

运行

#include <iostream> using namespace std; class Rectangle { private: int width; int height; public: // 带参构造 Rectangle(int w, int h) : width(w), height(h) { cout << "带参数构造函数被调用" << endl; } // 3. 拷贝构造函数(const防止修改原对象,&避免无限递归) Rectangle(const Rectangle& other) { width = other.width; height = other.height; cout << "拷贝构造函数被调用" << endl; } void showInfo() { cout << "矩形宽度:" << width << ",高度:" << height << endl; } }; int main() { Rectangle rect3(8, 4); // 调用带参构造 Rectangle rect4 = rect3; // 调用拷贝构造(用rect3复制出rect4) rect4.showInfo(); // 输出:矩形宽度:8,高度:4 return 0; }
4. 构造函数的初始化列表(推荐用法)

除了在构造函数体内赋值,还可以用初始化列表直接初始化成员变量,效率更高(尤其针对 const 成员、引用成员):

cpp

运行

#include <iostream> using namespace std; class Rectangle { private: int width; int height; const int PI; // const成员必须初始化,只能用初始化列表 public: // 初始化列表格式:构造函数名(参数) : 成员1(值1), 成员2(值2)... {} Rectangle(int w, int h) : width(w), height(h), PI(3.14) { cout << "初始化列表构造函数被调用" << endl; } void showInfo() { cout << "宽度:" << width << ",高度:" << height << ",PI:" << PI << endl; } }; int main() { Rectangle rect5(10, 6); rect5.showInfo(); // 输出:宽度:10,高度:6,PI:3.14 return 0; }

三、构造函数的关键注意事项

  1. 构造函数不能被声明为 const、static、virtual(因为创建对象时必须执行,且和对象绑定);
  2. 如果自定义了带参构造函数,编译器不会再自动生成默认构造函数,此时如果需要无参创建对象,必须手动定义;
  3. 拷贝构造函数的参数必须是引用(否则会触发无限递归调用拷贝构造),建议加 const 保护原对象;
  4. 构造函数可以重载(定义多个参数不同的构造函数),满足不同的初始化需求。

总结

  1. 构造函数是类的特殊成员函数,名同类名、无返回值,对象创建时自动调用,核心作用是初始化;
  2. 常见类型:无参(默认)、带参、拷贝构造,支持重载,推荐用初始化列表初始化成员;
  3. 自定义带参构造后,默认构造会失效,需手动定义才能无参创建对象。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:56:22

那个在DG数据库中将多行指定字段的文本替换操作

将java实践作业\imgs\headIco\全部替换为/upload/avatar/&#xff0c;怎么多行操作sql语句UPDATE 表名 SET 你的字段名 REPLACE(你的字段名, 被替换者字符串, 替换者字符串)UPDATE rolemestable SET HeadSrc REPLACE(HeadSrc, java实践作业\\imgs\\headIco\\, /upload/avatar…

作者头像 李华
网站建设 2026/4/16 12:50:49

基于深度学习的智慧识花系统的设计与实现(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

摘要 深度学习作为机器学习的一个重要分支&#xff0c;经过十多年的研究和发展&#xff0c;在计算机视觉分类、定位、检测和分割方面取得了良好的效果。花卉图像是一种典型的细粒度图像&#xff0c;具有许多复杂的特征&#xff0c;难以区分和识别。使用传统的方法识别花朵图像既…

作者头像 李华
网站建设 2026/4/16 14:36:07

Thinkphp和Laravel框架的精诺企业数字化精益制造生产系统_i36pxop6

目录ThinkPHP与Laravel框架在精诺企业数字化精益制造系统中的应用ThinkPHP框架的应用特点Laravel框架的技术优势系统核心功能与价值项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理ThinkPHP与Laravel框架在精诺企业数字化精益制造系统中的应用 精…

作者头像 李华
网站建设 2026/4/16 13:32:08

医疗OCR用Tesseract稳缩写识别

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 医疗OCR中Tesseract的稳定缩写识别&#xff1a;技术挑战与创新实践目录医疗OCR中Tesseract的稳定缩写识别&#xff1a;技术挑战与创新实践 引言&#xff1a;当缩写成为医疗数据的“隐形障碍” 一、医疗OCR缩写识别&#…

作者头像 李华
网站建设 2026/4/16 13:35:02

专科生必看!8个降AI率工具,高效避坑指南

专科生必看&#xff01;8个降AI率工具&#xff0c;高效避坑指南 AI降重工具&#xff1a;高效避坑的必备利器 随着人工智能技术的快速发展&#xff0c;越来越多的专科生在撰写论文时开始使用AI工具进行辅助。然而&#xff0c;AI生成的内容往往存在明显的“AI痕迹”&#xff0c;不…

作者头像 李华
网站建设 2026/4/16 13:32:00

Linux用户、组创建

#创建指定组ID的xixi组 groupadd -g 3001 xixi#创建指定用户ID的ADMIN用户&#xff0c;并加入进xixi组 useradd -u 3001 -G xixi ADMIN #创建指定用户ID的APP用户&#xff0c;并加入进xixi组 useradd -u 3002 -G xixi APP#设置两用户密码永不过期 chage -M 99999 ADMIN chage -…

作者头像 李华