news 2026/4/16 12:20:04

从过程性到面向对象: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/4/16 11:14:15

神经网络调参核心:如何科学优化超参数?

神经网络调参核心&#xff1a;如何科学优化超参数&#xff1f; 解锁模型性能的关键钥匙&#xff0c;就在这些看不见的参数里 大家好&#xff0c;我是你们的深度学习博主&#xff01; 今天我们来聊聊神经网络中那些神秘又重要的超参数&#xff08;hyper-parameter&#xff09;。…

作者头像 李华
网站建设 2026/4/11 18:00:35

收藏级大模型入门详解|小白程序员必看,从基础到实战一文吃透

大模型作为当下AI领域的核心热点&#xff0c;是程序员进阶、小白入门AI的必学知识点。它本质是包含超大规模参数的神经网络模型&#xff0c;核心训练分为预训练和微调两大阶段&#xff0c;其“大”体现在参数规模、架构规模、训练数据和算力需求四个核心维度。按数据类型可分为…

作者头像 李华