C++构造函数详解
在C中有一种特殊的成员函数它的名字和类名相同没有返回值不需要用户显式调用用户也不能调用而是在创建对象时自动执行。这种特殊的成员函数就是构造函数Constructor。我们可以通过成员函数 setname()、setage()、setscore() 分别为成员变量 name、age、score 赋值这样做虽然有效但显得有点麻烦。有了构造函数我们就可以简化这项工作在创建对象的同时为成员变量赋值请看下面的代码示例1代码语言javascriptAI代码解释#include iostream using namespace std; class Student{ private: char *m_name; int m_age; float m_score; public: //声明构造函数 Student(char *name, int age, float score); //声明普通成员函数 void show(); }; //定义构造函数 Student::Student(char *name, int age, float score){ m_name name; m_age age; m_score score; } //定义普通成员函数 void Student::show(){ coutm_name的年龄是m_age成绩是m_scoreendl; } int main(){ //创建对象时向构造函数传参 Student stu(小明, 15, 92.5f); stu.show(); //创建对象时向构造函数传参 Student *pstu new Student(李华, 16, 96); pstu - show(); return 0; }运行结果小明的年龄是15成绩是92.5李华的年龄是16成绩是96该例在 Student 类中定义了一个构造函数Student(char *, int, float)它的作用是给三个 private 属性的成员变量赋值。要想调用该构造函数就得在创建对象的同时传递实参并且实参由( )包围和普通的函数调用非常类似。在栈上创建对象时实参位于对象名后面例如Student stu(小明, 15, 92.5f)在堆上创建对象时实参位于类名后面例如new Student(李华, 16, 96)。构造函数必须是 public 属性的否则创建对象时无法调用。当然设置为 private、protected 属性也不会报错但是没有意义。构造函数没有返回值因为没有变量来接收返回值即使有也毫无用处这意味着不管是声明还是定义函数名前面都不能出现返回值类型即使是 void 也不允许函数体中不能有 return 语句。构造函数的重载和普通成员函数一样构造函数是允许重载的。一个类可以有多个重载的构造函数创建对象时根据传递的实参来判断调用哪一个构造函数。构造函数的调用是强制性的一旦在类中定义了构造函数那么创建对象时就一定要调用不调用是错误的。如果有多个重载的构造函数那么创建对象时提供的实参必须和其中的一个构造函数匹配反过来说创建对象时只有一个构造函数会被调用。对示例1中的代码如果写作Student stu或者new Student就是错误的因为类中包含了构造函数而创建对象时却没有调用。更改示例1的代码再添加一个构造函数示例2代码语言javascriptAI代码解释#include iostream using namespace std; class Student{ private: char *m_name; int m_age; float m_score; public: Student(); Student(char *name, int age, float score); void setname(char *name); void setage(int age); void setscore(float score); void show(); }; Student::Student(){ m_name NULL; m_age 0; m_score 0.0; } Student::Student(char *name, int age, float score){ m_name name; m_age age; m_score score; } void Student::setname(char *name){ m_name name; } void Student::setage(int age){ m_age age; } void Student::setscore(float score){ m_score score; } void Student::show(){ if(m_name NULL || m_age 0){ cout成员变量还未初始化endl; }else{ coutm_name的年龄是m_age成绩是m_scoreendl; } } int main(){ //调用构造函数 Student(char *, int, float) Student stu(小明, 15, 92.5f); stu.show(); //调用构造函数 Student() Student *pstu new Student(); pstu - show(); pstu - setname(李华); pstu - setage(16); pstu - setscore(96); pstu - show(); return 0; }运行结果小明的年龄是15成绩是92.5成员变量还未初始化李华的年龄是16成绩是96构造函数Student(char *, int, float)为各个成员变量赋值构造函数Student()将各个成员变量的值设置为空它们是重载关系。根据Student()创建对象时不会赋予成员变量有效值所以还要调用成员函数 setname()、setage()、setscore() 来给它们重新赋值。构造函数在实际开发中会大量使用它往往用来做一些初始化工作例如对成员变量赋值、预先打开文件等。

相关新闻

影刀RPA 医药行业自动化:药品信息采集与价格监控

影刀RPA 医药行业自动化:药品信息采集与价格监控

影刀RPA 医药行业自动化:药品信息采集与价格监控作者:林焱一、什么情况用影刀处理医药数据 医药行业的信息管理痛点很明显:国家医保局每季度更新医保目录,各省市的药品挂网价格频繁调整,药企的市场部门需要实时掌握竞品…

2026/7/13 0:43:31 阅读更多 →
Java 大厂面试高频题:别再只会 new 了!Java 创建对象竟然有这么多种方式

Java 大厂面试高频题:别再只会 new 了!Java 创建对象竟然有这么多种方式

在学习 Java 时,我们最先接触的对象创建方式通常是: Person person new Person();因此,很多初学者会认为 Java 创建对象只能使用 new。 实际上,Java 中常见的对象创建方式不止一种。除了直接使用 new,还可以通过反射、…

2026/7/13 0:35:28 阅读更多 →
GHelper完整指南:5步轻松掌控华硕笔记本性能,告别臃肿官方软件

GHelper完整指南:5步轻松掌控华硕笔记本性能,告别臃肿官方软件

GHelper完整指南:5步轻松掌控华硕笔记本性能,告别臃肿官方软件 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vi…

2026/7/13 0:33:28 阅读更多 →

最新新闻

每日任务页面

每日任务页面

<template><div class"worktime-container"><!-- 筛选区域 --><div class"search-area"><a-form layout"inline" :model"searchForm"><a-form-item label"任务类型"><a-selectv-mod…

2026/7/13 1:51:58 阅读更多 →
C++14数字分隔符:提升代码可读性的零开销语法糖

C++14数字分隔符:提升代码可读性的零开销语法糖

1. 项目概述&#xff1a;为什么我们需要数字分隔符&#xff1f;写C代码&#xff0c;尤其是处理金融、图形、嵌入式或者任何需要大量硬编码数字常量的领域时&#xff0c;你肯定遇到过这样的场景&#xff1a;面对一长串数字&#xff0c;比如1000000000&#xff0c;你得在心里默默…

2026/7/13 1:49:57 阅读更多 →
龙魂蚁群引擎 v2.0 · 深度学习与融合报告

龙魂蚁群引擎 v2.0 · 深度学习与融合报告

龙魂蚁群引擎 v2.0 深度学习与融合报告DNA: #龍芯⚡️丙午辛未LACA-v2.0-FUSION-REPORT 时间: 丙午年辛未月 (2026-07-13 01:17) 作者: UID9622 | 诸葛鑫 (Lucky) 源论文: Kimi Agent 龙魂蚁群架构 LACA v1.0 测试结果: 7/7 全部通过 ✅一、论文核心贡献深度学习 1.1 范式转换…

2026/7/13 1:47:57 阅读更多 →
感情中真正的主动权,不是故意不回消息

感情中真正的主动权,不是故意不回消息

很多人理解的“掌握主动权”是&#xff1a;故意晚一点回复&#xff1b;让对方吃醋&#xff1b;忽冷忽热&#xff1b;谁先主动谁就输了&#xff1b;通过冷淡让对方更在意自己。这并不是真正的主动权。这只是把自己的注意力全部放在对方身上&#xff0c;然后不断计算应该几点回复…

2026/7/13 1:45:56 阅读更多 →
三分钟了解流量卡的选择

三分钟了解流量卡的选择

选一张好用又省心的流量卡&#xff0c;信号是根本&#xff0c;但背后还有几个关键细节——做好功课再办卡&#xff0c;不花冤枉钱&#xff01; 1️⃣ 信号质量是核心基础 中国移动用户数最多&#xff08;截至2025年3月末&#xff1a;9.83亿户&#xff09;&#xff0c;电信4.2…

2026/7/13 1:45:56 阅读更多 →
影刀RPA 图片批量压缩与格式转换:处理大量素材

影刀RPA 图片批量压缩与格式转换:处理大量素材

title: “影刀RPA 图片批量压缩与格式转换&#xff1a;处理大量素材” date: 2026-07-01 author: 林焱 影刀RPA 图片批量压缩与格式转换&#xff1a;处理大量素材 电商运营有几百张产品图&#xff0c;需要统一压缩到500KB以内、统一转成JPEG、统一加水印、统一改尺寸……这类批…

2026/7/13 1:43:55 阅读更多 →

日新闻

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握&#xff1a;从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:01:19 阅读更多 →
浦东旧模块回收哪家强?专业评测带你一探究竟

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

2026/7/13 0:01:19 阅读更多 →
卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

1 研究背景与现存技术痛点&#xff08;提出问题&#xff09;基因工程、蛋白质组学、生物制药研发流程中&#xff0c;蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈&#xff1a;传统离子交换、分子筛层析无特异性…

2026/7/13 0:05:20 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试&#xff1a;燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午&#xff0c;互联网大厂的面试官坐在桌前&#xff0c;准备迎接他的面试候选人——燕双非&#xff0c;一个以搞笑和幽默著称的程序员。第一轮提问 面试官&#xff1a;燕双非&#xff0c;作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型&#xff1a;示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天&#xff0c;车载以太网作为新一代车载网络的核心传输技术&#xff0c;其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0&#xff1a;APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时&#xff0c;往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻