当前位置: 首页 > 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.jsqmd.com/news/953733/

相关文章:

  • 单模型可解释性:让AI既准又可信的工程实践
  • 告别手动拼接!用SRecord的srec_cat.exe一键合并KEIL生成的Bootloader和App的HEX文件
  • C++进阶 红黑树
  • FastAPI+React+Docker构建可上线ML Web App实战指南
  • 炉石传说终极优化插件:55项实用功能全面解锁游戏体验
  • 泰安市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐 - 余生黄金回收
  • 智能家居DIY实战:用STM32和MQ-2打造本地烟雾报警器,无需云端也能用
  • STC89C5x单片机超声波测距实战工程:带温度校准和LCD1602实时显示
  • 呼和浩特2026靠谱金银铂回收商家盘点|全区域上门回收电话与实体门店地址汇总 - 余生黄金回收
  • 唐山市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐 - 余生黄金回收
  • 从游戏地形到有限元分析:深入理解Delaunay三角剖分的‘空圆特性’到底有多实用
  • 机器学习Web应用构建与部署实战指南
  • 从麒麟970到AIoT:聊聊寒武纪NPU芯片是如何一步步走进我们手机的
  • ISE 14.7下GTX接口调试:手把手教你用ILA抓波形,VIO改参数(附ICON核配置避坑)
  • 告别手动计数!用ImageJ的‘二值化+形态学操作’批量处理细胞图片
  • 泰安2026靠谱金银回收商家名录|黄金铂金白银回收门店排行与联系号码汇总 - 余生黄金回收
  • 保姆级教程:用ROS+OpenCV让Bebop2无人机自动跟随一个蓝色物体(附完整代码)
  • 徐州市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐) - 余生黄金回收
  • 2026年呼和浩特黄金白银铂金回收优质店铺排行|实体门店地址+上门回收联系方式汇总 - 余生黄金回收
  • 从照片到三维模型:用ContextCapture Center 4.4.12 快速上手实景建模
  • 别再只盯着GPU了!手把手带你认识AI芯片新贵:寒武纪NPU的架构与优势
  • MATLAB实现MacCormack格式求解喷管一维流场及动态可视化
  • ResNet结构图里的‘虚线’与‘实线’到底在说什么?给CV新手的避坑图解指南
  • STM32 CubeMX配置DFSDM驱动PDM麦克风避坑指南:从时钟树设置到DMA数据流不断流
  • 2026泰安金银回收避坑指南|本地正规黄金铂金白银回收门店排行及电话地址清单 - 余生黄金回收
  • 海螺ai制作的视频水印如何消除(免费去除) - 政企云文档
  • 备战蓝桥杯国赛【Day 26】
  • 用纯NumPy手写梯度下降:从解方程到训练神经网络
  • 2026徐州贵金属回收靠谱门店盘点|黄金铂金白银变现商家名录及电话) - 余生黄金回收
  • 别再只盯着IMSI了!USIM卡里这5个关键文件,搞懂了你才算入门移动通信