news 2026/8/29 10:05:18

从过程性到面向对象:C++编程思维的飞跃

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从过程性到面向对象:C++编程思维的飞跃

从过程性到面向对象:C++编程思维的飞跃

过程性编程 vs 面向对象编程

在编程世界中,有两种主流的思维方式:过程性编程面向对象编程。让我们通过一个实际的例子来理解它们的区别。

想象你是垒球队的数据记录员。如果采用过程性编程方法,你会这样思考:

“我需要输入每个球员的数据,计算命中率,显示结果…我应该设计函数来处理输入、计算和显示。数据可以用结构体数组来存储。”

而如果采用面向对象编程方法,思考方式完全不同:

“我要跟踪的是’球员’这个对象。每个球员对象应该有自己的数据和操作方法:初始化、更新、显示…我需要设计一个球员类。”

核心区别

  • 过程性编程:先考虑步骤,再考虑数据
  • 面向对象编程:先考虑对象,再考虑操作

C++中的类:从抽象到实现

什么是类型?

在C++中,类型不仅仅指数据的存储方式,还包括可执行的操作。例如,int类型不仅占用4字节内存,还支持加减乘除等运算。

类的定义

类是将数据操作数据的方法组合在一起的C++工具。它实现了封装:将公有接口与实现细节分离。

让我们看一个股票类的例子:

// stock00.h - 类声明#ifndefSTOCK00_H#defineSTOCK00_H#include<string>classStock{private:std::string company;// 公司名称longshares;// 持有股数doubleshare_val;// 每股价格doubletotal_val;// 股票总值voidset_tot(){total_val=shares*share_val;}// 私有方法public:// 公有接口voidacquire(conststd::string&co,longn,doublepr);voidbuy(longnum,doubleprice);voidsell(longnum,doubleprice);voidupdate(doubleprice);voidshow();};#endif

访问控制

  • public:公有成员,形成类的接口
  • private:私有成员,隐藏实现细节

实现类成员函数

成员函数的实现有两个关键特点:

  1. 使用作用域解析运算符::标识所属类
  2. 可以访问类的私有成员
// stock00.cpp - 类方法实现#include<iostream>#include"stock00.h"voidStock::acquire(conststd::string&co,longn,doublepr){company=co;if(n<0){std::cout<<"股数不能为负,已设为0\n";shares=0;}elseshares=n;share_val=pr;set_tot();// 调用私有方法}voidStock::buy(longnum,doubleprice){if(num<0)std::cout<<"购买股数不能为负\n";else{shares+=num;share_val=price;set_tot();}}// 其他方法类似...

内联方法

在类声明中定义的方法自动成为内联函数:

// 类内定义(自动内联)voidset_tot(){total_val=shares*share_val;}// 类外定义(显式内联)inlinevoidStock::set_tot(){total_val=shares*share_val;}

使用类对象

使用类对象就像使用基本类型一样简单:

// usestock.cpp - 使用Stock类#include<iostream>#include"stock00.h"intmain(){Stock fluffy_the_cat;// 创建对象fluffy_the_cat.acquire("NanoSmart",1000,10.0);fluffy_the_cat.show();fluffy_the_cat.buy(15,18.125);fluffy_the_cat.show();// 更多操作...return0;}

重要概念

  • 每个对象有自己的数据存储空间
  • 所有对象共享同一套方法代码
  • 调用方法时,方法操作的是调用它的对象的数据

改进实现而不影响接口

OOP的强大之处在于:可以修改内部实现而不影响外部使用:

// 改进show()方法的实现voidStock::show(){usingstd::cout;usingstd::ios_base;// 保存原格式ios_base::fmtflags orig=cout.setf(ios_base::fixed,ios_base::floatfield);std::streamsize prec=cout.precision(3);// 输出信息cout<<"公司:"<<company<<" 持股数:"<<shares<<'\n'<<"每股价格:$"<<share_val;cout.precision(2);cout<<" 总价值:$"<<total_val<<'\n';// 恢复原格式cout.setf(orig,ios_base::floatfield);cout.precision(prec);}

关键要点

  1. 抽象是核心:关注对象做什么,而不是怎么做
  2. 封装是关键:隐藏实现细节,暴露清晰接口
  3. 类定义类型:指定数据存储和可执行操作
  4. 对象是实例:每个对象有自己的状态,共享行为

面向对象编程不仅仅是语法,更是一种思维方式。它让我们的代码更模块化、更易维护、更贴近现实世界的问题域。

掌握类的基本概念后,你将开启C++编程的新篇章,能够构建更复杂、更健壮的系统。记住:好的类设计始于好的抽象思考!

编程之道,始于抽象,成于封装,臻于设计。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 9:33:34

西门子200smart运动控制四轴搬运取料机(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

西门子200smart运动控制四轴搬运取料机(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码该程序为两台smart plc通过通讯控制四轴伺服电机的搬运取料机案例工程案例程序。 商品包含200smar_PLC程序项目电气接线图程序流程说明触…

作者头像 李华
网站建设 2026/8/29 8:52:09

2026大模型平台漏洞全景报告:攻防新格局下的风险纵深与防御体系

2026年&#xff0c;大语言模型&#xff08;LLM&#xff09;技术正从单一文本交互向自主智能体协同、全模态融合、长期记忆落地的新阶段高速演进&#xff0c;攻击面随技术能力同步拓宽&#xff0c;漏洞类型从传统的提示注入、数据泄露&#xff0c;升级为智能体劫持、多模态隐形注…

作者头像 李华
网站建设 2026/8/29 8:52:10

比MySQL快800倍的数据库:ClickHouse的性能秘密

前言 当传统数据库在处理亿级数据查询时陷入性能瓶颈&#xff0c;一家俄罗斯互联网巨头却默默开发出了一款能比Vertica快5倍、比MySQL快800倍的分析型数据库。 “每天处理超过1000亿条记录&#xff0c;支持近400台服务器集群&#xff0c;历史总记录超过13万亿条。”这是ClickHo…

作者头像 李华
网站建设 2026/8/27 12:40:15

收藏级|大模型入门到就业完整转型攻略,小白/程序员必看

本文详细拆解了零基础进入大模型领域的全流程转型路径&#xff0c;清晰梳理四大核心发展方向&#xff08;开发、应用、研究、工程&#xff09;&#xff0c;手把手指导掌握编程与数学基础、吃透Transformer架构与预训练技术&#xff0c;搭配可直接上手的实践项目、开源社区玩法、…

作者头像 李华
网站建设 2026/8/28 11:26:19

这次终于选对了!8个降AI率平台测评:专科生必看的降AI率工具推荐

在当前学术写作日益依赖AI工具的背景下&#xff0c;论文降AIGC率、去除AI痕迹、降低查重率已成为专科生们必须面对的挑战。随着高校对AI生成内容的检测标准不断提高&#xff0c;单纯依靠AI写作已经无法满足论文质量要求。这时候&#xff0c;专业的AI降重工具就显得尤为重要。这…

作者头像 李华