当前位置: 首页 > news >正文

别再死记硬背C++类和对象了!用‘借书证’和‘时间’两个实战案例帮你彻底搞懂(附完整代码)

用借书证和时间管理案例轻松掌握C++类和对象

C++中的类和对象是面向对象编程的核心概念,但对于初学者来说,这些抽象概念往往难以理解。与其死记硬背各种术语,不如通过两个贴近生活的案例——借书证和时间管理系统,来真正掌握类和对象的精髓。本文将带你从头构建这两个实用小程序,在编写代码的过程中理解构造函数、析构函数、成员函数等关键概念。

1. 借书证管理系统:类的基本结构

1.1 设计借书证类

借书证是我们日常生活中常见的物品,它包含学生信息、借书情况等数据。在C++中,我们可以将这些数据封装成一个类:

class BookCard { private: string id; // 学号 string name; // 姓名 int bookCount; // 借书数量 public: BookCard(string id="", string name="", int count=0); void display(); bool borrow(); };

这个类有三个私有数据成员:学号、姓名和借书数量。私有成员只能在类内部访问,外部需要通过公有成员函数来操作这些数据。

1.2 实现成员函数

构造函数用于初始化对象的数据成员,我们可以使用初始化列表来简化代码:

BookCard::BookCard(string id, string name, int count) : id(id), name(name), bookCount(count) {}

显示借书证信息的成员函数实现如下:

void BookCard::display() { cout << "学号:" << id << "\n姓名:" << name << "\n借书数量:" << bookCount << endl; }

借书功能需要考虑借书数量限制,最多借10本:

bool BookCard::borrow() { if(bookCount >= 10) { cout << "借书已达上限10本" << endl; return false; } bookCount++; return true; }

1.3 使用借书证类

在main函数中,我们可以创建多个借书证对象并测试功能:

int main() { BookCard card1("B20230001", "张三", 5); BookCard card2("B20230002", "李四", 10); card1.display(); card1.borrow(); card1.display(); card2.display(); card2.borrow(); return 0; }

运行结果会显示借书证信息,并验证借书功能是否正常工作。

2. 时间管理系统:深入理解类特性

2.1 设计时间类

时间类需要存储小时、分钟、秒等信息,并提供修改和显示功能:

class Time { private: int hour; int minute; int second; public: Time(int h=0, int m=0, int s=0); ~Time(); void setTime(int h, int m, int s); void showTime(); void increaseSecond(); };

2.2 实现时间类功能

构造函数和析构函数实现如下:

Time::Time(int h, int m, int s) { hour = h; minute = m; second = s; cout << "时间对象已创建" << endl; } Time::~Time() { cout << "时间对象已销毁" << endl; }

增加秒数的功能需要考虑进位情况:

void Time::increaseSecond() { second++; if(second >= 60) { second = 0; minute++; if(minute >= 60) { minute = 0; hour++; if(hour >= 24) { hour = 0; } } } }

2.3 测试时间类

在main函数中测试时间类功能:

int main() { Time t(23,59,59); t.showTime(); t.increaseSecond(); t.showTime(); Time t2(12,30,45); t2.showTime(); return 0; }

运行结果会显示时间变化,特别是23:59:59增加1秒后变为00:00:00的情况。

3. 友元函数与友元类:打破封装限制

###3.1 友元函数的使用

友元函数可以访问类的私有成员,但又不属于类的成员函数。我们可以修改时间类,添加友元函数:

class Time { friend void printTime(Time t); // 其他成员... }; void printTime(Time t) { cout << t.hour << ":" << t.minute << ":" << t.second << endl; }

###3.2 友元类的应用

友元类可以访问另一个类的私有成员。例如,我们可以定义一个学生类和一个成绩类:

class Student { friend class Grade; private: string name; int score; public: Student(string n, int s) : name(n), score(s) {} }; class Grade { public: void showStudent(Student s) { cout << "姓名:" << s.name << "\n成绩:" << s.score << endl; } };

##4. 对象拷贝与引用传递

###4.1 拷贝构造函数

拷贝构造函数用于对象初始化时复制另一个对象的内容:

class Time { public: Time(const Time& t) { hour = t.hour; minute = t.minute; second = t.second; } // 其他成员... };

###4.2 引用传递与指针传递

引用传递和指针传递可以避免对象拷贝,提高效率:

void showTime(Time& t) { t.showTime(); } void showTime(Time* t) { t->showTime(); }

在main函数中调用这些函数,观察构造函数和析构函数的调用情况。

http://www.gsyq.cn/news/1465350.html

相关文章:

  • FastAPI+React+Docker构建可上线ML Web App实战指南
  • 炉石传说终极优化插件:55项实用功能全面解锁游戏体验
  • STC89C5x单片机超声波测距实战工程:带温度校准和LCD1602实时显示
  • 智能家居DIY实战:用STM32和MQ-2打造本地烟雾报警器,无需云端也能用
  • 呼和浩特2026靠谱金银铂回收商家盘点|全区域上门回收电话与实体门店地址汇总 - 余生黄金回收
  • 告别手动计数!用ImageJ的‘二值化+形态学操作’批量处理细胞图片
  • 保姆级教程:用ROS+OpenCV让Bebop2无人机自动跟随一个蓝色物体(附完整代码)
  • 从照片到三维模型:用ContextCapture Center 4.4.12 快速上手实景建模
  • 2026徐州贵金属回收靠谱门店盘点|黄金铂金白银变现商家名录及电话) - 余生黄金回收
  • 别再只盯着IMSI了!USIM卡里这5个关键文件,搞懂了你才算入门移动通信
  • Java Swing写的图书馆桌面管理程序(含源码+论文,Eclipse/IDEA可直接运行)
  • 多维聚合与数据操作:构建可下钻的分析立方体
  • DPO训练范式原理与实战:绕过奖励模型的对齐新路径
  • CANoe Panel设计避坑指南:你的Combo Box为什么控制不了信号?从属性配置到工程管理
  • 本科生毕业设计专用:ST-GCN骨骼动作识别完整Python工程(含NTU/Kinetics数据生成、摄像头实时识别与逐行中文注释)
  • 小云雀视频水印如何去除(免费好用的) - 政企云文档
  • MuleSoft企业级LLM编排:稳定、可控、可审计的AI集成实践
  • 用MATLAB手把手复现MUSIC算法:从协方差矩阵到DOA估计的完整流程(附避坑指南)
  • 从内部电路图看懂本质:FPGA的LUT和CPLD的与或阵列,到底谁更灵活?
  • Windows驱动一键装:点一下就自动扫INF、签名校验、注册服务
  • 如何3分钟搞定Windows与Office永久激活:KMS智能激活工具完全指南
  • TongWeb 7.x 部署后必改的5个 tongweb.xml 配置项(附端口修改、应用卸载教程)
  • AI工具赋能课堂革命:一线教师必须掌握的7个智能教学整合实战模板
  • 别再死记硬背了!一张表帮你搞定GPS、北斗、伽利略所有频点(附MATLAB卫星筛选脚本)
  • 文章标题:赤峰市2026年靠谱黄金白银铂金回收门店排行|同城上门回收联系方式汇总 - 余生黄金回收
  • Delphi7直连MySQL5.7免安装驱动包:含验证通过的libmysql.dll与dbxopenmysql50.dll及完整测试工程
  • 从打孔卡到3D NAND:计算机存储器的‘进化史’与技术选型指南
  • 预言变量与反向数据流分析在程序优化中的应用
  • 物理Transformer架构:AI与物理动力学的融合创新
  • 文章标题:威海市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐(同城上门版) - 余生黄金回收