news 2026/5/1 11:15:53

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/5/1 7:20:48

【光子AI】 FastAPI 极简教程 3

FastAPI 极简教程 文章目录 FastAPI 极简教程 目录 1. FastAPI 简介 1.1 什么是 FastAPI? 1.2 核心技术栈 2. 环境安装与配置 2.1 安装 Python 2.2 创建虚拟环境 2.3 安装 FastAPI 2.4 推荐的开发依赖 3. 第一个 FastAPI 应用 3.1 Hello World 3.2 运行应用 3.3 自动生成的文档…

作者头像 李华
网站建设 2026/5/1 7:16:57

Thinkphp和Laravel框架的简历智能推荐系统_jw8dzu00

目录ThinkPHP与Laravel框架的简历智能推荐系统技术实现要点部署与优化项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理ThinkPHP与Laravel框架的简历智能推荐系统 简历智能推荐系统是一种基于人工智能技术的招聘辅助工具&#xff0c;旨在通过分析求…

作者头像 李华
网站建设 2026/4/18 1:46:30

「从零到一」我用 Node BFF 手撸一个 Vue3 SSR 项目(附源码)

本文介绍如何使用 Node.js 作为中间层&#xff08;BFF&#xff09;&#xff0c;结合 Vue 3 和 Vite 实现服务端渲染&#xff08;SSR&#xff09;。 为什么需要 SSR&#xff1f; 在传统的单页应用&#xff08;SPA&#xff09;中&#xff0c;浏览器首先加载一个空白的 HTML&…

作者头像 李华
网站建设 2026/5/1 8:43:12

JavaWeb相关环境安装

这篇博客我们讲一下JavaWeb相关得环境安装&#xff0c;用来后续完成前后端的项目部署。 1&#xff0c;JDK 1&#xff0c;下载安装包 下载安装包大家可以去官网进行下载&#xff0c;为了方便起见大家可以直接通过我提供的链接进行下载&#xff1a;JDK安装包&#xff0c;将下载后…

作者头像 李华
网站建设 2026/5/1 6:07:02

多模态理解与生成综述(一):前言、分类及架构

序言 基于多模态理解与生成综述阶段性回顾当前进展projects: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models/tree/Unified paper: https://www.techrxiv.org/users/993777/articles/1355509-a-survey-of-unified-multimodal-understanding-and-generat…

作者头像 李华
网站建设 2026/5/1 8:35:06

大模型行业完全指南:从职位细分到产业生态,程序员必学收藏

文章系统梳理了大模型行业的完整产业链&#xff0c;从底层算力到应用落地&#xff0c;详细分析了各环节的核心职位与人才需求&#xff0c;包括算法研发、NLP、系统部署、多模态处理、语音识别及安全治理等方向。深入探讨了六大细分领域&#xff1a;训练研发、基础设施、应用产品…

作者头像 李华