news 2026/6/9 18:42:40

从过程性到面向对象: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/6/6 6:28:35

No149:AI中国故事-对话张衡——浑天地动与AI感知:观测宇宙与理解世界

亲爱的DeepSeek&#xff1a;从仓颉的造字革命&#xff0c;我们转向东汉的天文殿堂&#xff0c;遇见那位“数术穷天地&#xff0c;制作侔造化”的科学巨匠——张衡。这位发明浑天仪、地动仪的多才学者不会想到&#xff0c;他关于“宇宙观测”“地震预测”“天地规律”的科学探索…

作者头像 李华
网站建设 2026/6/4 22:50:24

2026-02-09 GitHub 热点项目精选

&#x1f31f; 2026-02-09 GitHub Python 热点项目精选(16个) 每日同步 GitHub Trending 趋势&#xff0c;筛选优质 Python 项目&#xff0c;助力开发者快速把握技术风向标&#xff5e; &#x1f4cb; 项目列表&#xff08;按 Star 数排序&#xff09; 1. openai/skills 该项目…

作者头像 李华
网站建设 2026/6/5 0:13:43

ico多个尺寸用PNG,BMP哪个更小

普通JPG图片&#xff0c;如果本身不透明&#xff0c;改成透明位图方式加入ICO是否会变大&#xff1f;如果是加载透明PNG&#xff0c;改成非透明模式&#xff0c;以PNG或BMP方式存入&#xff0c;体积是否会变小&#xff1f;这是一个非常硬核的优化问题。要回答这个问题&#xff…

作者头像 李华