C++如何定义和使用一个类(Class)?(构造函数示例)

发布时间 - 2025-12-29 00:00:00    点击率:
C++中类由class关键字定义,含私有数据成员和公有成员函数,构造函数名与类名相同、无返回类型,用成员初始化列表高效初始化;可重载、委托或设默认参数。

在C++中定义一个类,就是用 class 关键字声明一组相关数据(成员变量)和操作这些数据的函数(成员函数),其中构造函数用于初始化对象。

定义类的基本结构

类通常包含私有(private)数据成员和公有(public)成员函数。例如定义一个表示学生的类:

class Student {
  private:
    std::string name;
    int age;
  public:
    Student();              // 默认构造函数
    Student(std::string n, int a); // 带参构造函数
    void display() const;
};

实现构造函数

构造函数名必须与类名完全相同,没有返回类型(连 void 也不能写)。它在创建对象时自动调用:

Student::Student() : name("Unknown"), age(0) {}

Student::Student(std::string n, int a) : name(n), age(a) {}

  • 使用成员初始化列表(冒号后部分)比在函数体内赋值更高效,尤其对自定义类型
  • 如果没定义任何构造函数,编译器会提供默认构造函数;但一旦定义了,就不会再自动生成默认版本
  • 可以重载多个构造函数,只要参数列表不同

创建和使用对象

定义类之后,就可以用它创建对象,并调用成员函数:

int main() {
  Student s1;                         // 调用默认构造函数
  Student s2("Alice", 20);         // 调用带参构造函数
  s2.display();
  return 0;
}

  • 对象在栈上创建时,构造函数立即执行
  • 若通过 new 动态分配(如 Student* p = new Student("Bob", 22);),构造函数也在内存分配后立刻调用
  • 成员函数需声明为 const(如 display() const)才能被 const 对象调用

补充:默认参数与委托构造(C++11起)

可简化构造函数数量:

Student::Student(std::string n = "Unknown", int a = 0) : name(n), age(a) {}

或用委托构造避免重复代码:

Student::Student() : Student("Unknown", 0) {}
Student::Student(std::string n, int a) : name(n), age(a) {}

  • 委托构造中,冒号后只能调用本类的另一个构造函数,且不能同时使用成员初始化列表
  • 被委托的构造函数先执行,再继续当前构造函数的函数体(如果有)


#   # ai  # c++  # String  # 成员变量  # 成员函数  # 构造函数  # const  # int  # void  # class  # public  # private  # 委托  # 对象  # display  # 多个  # 就不  # 也在  # 本类  # 自定义  # 它在  # 会再  # 用它  # 自动生成  # 或用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何创建自定义Facades?(详细步骤)  C语言设计一个闪闪的圣诞树  制作电商网页,电商供应链怎么做?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  音响网站制作视频教程,隆霸音响官方网站?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  JS实现鼠标移上去显示图片或微信二维码  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Python并发异常传播_错误处理解析【教程】  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel如何处理CORS跨域请求?(配置示例)  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  如何用好域名打造高点击率的自主建站?  网易LOFTER官网链接 老福特网页版登录地址  如何用低价快速搭建高质量网站?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  简单实现Android文件上传  zabbix利用python脚本发送报警邮件的方法  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何选择可靠的免备案建站服务器?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Windows Hello人脸识别突然无法使用  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何快速生成橙子建站落地页链接?  Firefox Developer Edition开发者版本入口  北京网站制作的公司有哪些,北京白云观官方网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel中的Facade(门面)到底是什么原理  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Thinkphp 中 distinct 的用法解析  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  php打包exe后无法访问网络共享_共享权限设置方法【教程】  如何快速查询网址的建站时间与历史轨迹?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  高防服务器如何保障网站安全无虞?  JS中对数组元素进行增删改移的方法总结  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何在建站宝盒中设置产品搜索功能?  如何快速查询网站的真实建站时间?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何在自有机房高效搭建专业网站?  Bootstrap CSS布局之列表  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法