C++ (第二天下午---面向对象之类与对象)

一、面向过程与面向对象

1、面向过程
面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。
在这里插入图片描述
举个例子,下五子棋,面向过程的设计思路是首先分析解决这个问题的步骤:

开始游戏, 
黑子先走, 
绘制画面, 
判断输赢, 
轮到白子, 
绘制画面, 
判断输赢, 
返回步骤2, 
输出最后结果

可见,面向过程始终关注的是怎么一步一步地判断棋局输赢的,通过控制代码,从而实现函数的顺序执行。

2、面向对象(OOP)
在日常生活或编程中,简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程的思想是远远不够的。所以慢慢就出现了面向对象的编程思想。世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个对象在整个解决问题的步骤中的属性和行为。
在这里插入图片描述
在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:

1)黑白双方,这两方的行为是一样的。
(2)棋盘系统,负责绘制画面
(3)规则系统,负责判定犯规、输赢等。

然后赋予每个对象一些属性和行为:

第一类对象(黑白双方)负责接受用户输入,并告知
第二类对象(棋盘系统)棋子布局的变化,棋盘系统接收到了棋子的变化,并负责在屏幕上面显示出这种变化,同时利用
第三类对象(规则系统)来对棋局进行判定。

可以看出,面向对象是以功能来划分问题,而不是以步骤解决。比如绘制画面这个行为,在面向过程中是分散在了多个步骤中的,可能会出现不同的绘制版本,所以要考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘系统这个对象中出现,从而保证了绘图的统一。

练习1:使用面向过程的C语言实现面向对象的方法

#include <iostream>using namespace std;//C结构体
typedef struct {//属性char name[256];int age;int height;//行为 --函数指针void (*eat)(void);void (*playGame)(void);
}GirlFriend_t;void eat(void)
{cout<<"eat"<<endl;
}
void playGame(void)
{cout<<"playGame"<<endl;
}int main()
{//结构体的方式GirlFriend_t mya ={"如花",28,166,eat,playGame};mya.eat();mya.playGame();return 0;
}

练习2:使用C++结构体实现面向对象

#include<iostream>using namespace std;//女朋友是一个整体  对象
//关于对象:   1、属性   关于 这个对象的特征的描述  年龄  姓名    变量
//            2、行为   吃饭、打游戏  玩 、睡觉....             函数 
typedef struct GirlFriend{//属性char name[256];int age;int money;//行为void eat(){printf("[%s] 我正在吃饭....\n",this->name);}void player(){printf("[%s]别说了,上号...\n",this->name);}int getAge(){return this->age;}}GirlFriend_t; int main(){GirlFriend_t s1 = {"zhang3",22};GirlFriend_t s2 = {"ruhua",22};s1.eat();s2.eat();cout<<s1.getAge()<<endl;
}

二、类与对象

1、概念
对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

对象的载体:人、电脑、风扇、桌子、游戏、旅游、棋盘系统.....
对象的描述:特征/属性--变量--数据成员 功能/方法--函数--函数成员

类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是 类,类的具体化(实例化)就是对象,类实际上就是一种数据类型 。

女朋友1  ----有属性(身高、体重、姓名..) 有行为(吃饭、睡觉、打游戏、生气.)
女朋友2  ----有属性(身高、体重、姓名..) 有行为(吃饭、睡觉、打游戏、生气.)
女朋友3  ----有属性(身高、体重、姓名..) 有行为(吃饭、睡觉、打游戏、生气.------女朋友123 是具体的事物(),也就是对象
------提炼出共同点,抽象出一个类:GirlFriend类

2、设计和使用一个类

1) 找出对象 归类 —时间类
2) 抽象:(提炼共同点)
特征/属性:时 分 秒
功能/方法:显示时间 设置时间
3) 封装
把对象的属性和服务结合成一个独立的系统单元。尽可能屏蔽对象的内部细节。对外形成一个边界(或者说一道屏障), 只保留有限的对外接口使之与外部发生联系。
4) 实例化对象
定义一个类的对象,通过对象调用类中的成员
3、类的简单设计格式

class 类名{ 类的特征(属性) 成员变量 类的行为(功能) 成员方法, 函数 
}

比如:设计一个女朋友类

class GirlFriend{//属性--数据成员char name[256];int age;float score;//行为--函数成员void print(){cout<<name<<age<<score<<endl;}int playGame(){cout<<"playGame"<<endl;}int study(){cout<<"study"<<endl;}
};

4、结构体与类
在这里插入图片描述
5、类的成员权限
成员的性质由关键字public、protected、private 决定 ,如果在进行类的声明时不写上面这些关键字,默认都是私有的。

public     公有         公有段的成员是提供给外部的接口 
protected  保护         保护段成员在该类和它的派生类中可见 
private    私有         私有段成员仅在类中可见 
class  类名
{
public://公共权限        类的外部 类内部   类的派生类  友元protected://保护权限    类内部   类的派生类  友元private://私有权限    类内部    友元};

比如:

//类的实例化,也就是创建一个类的对象
GirlFriend mygirl1;
mygirl1.playGame(); //访问错误,因为类中默认的权限是私有的,不能在类的外部访问私有成员

所以应该给成员添加权限:

//设计一个类
class GirlFriend{
public://行为--函数成员void print(){cout<<name<<age<<score<<endl;}int playGame(){cout<<"playGame"<<endl;}int study(){cout<<"study"<<endl;}
private://属性--数据成员char name[256];int age = 20;  //C++98标准不支持这种写法 C++11才支持float score;    
};

6、如何访问类中的成员

  • 类内部的成员访问其它成员,直接访问
  • 类的外部 访问类的成员,通过对象才能访问

7、特点
1)类的属性变量成员一般设置为私有权限,可以自己控制属性的读写权限,确保数据的安全性。还可以将用户传入的数据进行检测。

8、类的实例化

1. 静态分配内存
GirlFriend mygirl1;    
mygirl1.playGame();

9、类的成员内部声明,外部定义

//设计一个类
class GirlFriend{
public://行为--函数成员void print();int playGame();int study(){cout<<"study"<<endl;}
private://属性--数据成员char name[256];int age = 20;  //C++98标准不支持这种写法 C++11才支持float score;    
};
//在类的外部进行定义
void GirlFriend::print()
{cout<<name<<age<<score<<endl;
}
int GirlFriend::playGame()
{cout<<"playGame"<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/39245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM大模型工程师面试经验宝典--进阶版2(2024.7月最新)

目录 1 大模型怎么评测&#xff1f; 2 大模型的honest原则是如何实现的&#xff1f;模型如何判断回答 的知识是训练过的已知的知识&#xff0c;怎么训练这种能力&#xff1f; 3 如何衡量大模型水平&#xff1f; 4 大模型评估方法 有哪些&#xff1f; 5 大模型评估工具 有哪…

3115. 质数的最大距离

Powered by:NEFU AB-IN Link 文章目录 3115. 质数的最大距离题意思路代码 3115. 质数的最大距离 题意 给你一个整数数组 nums。 返回两个&#xff08;不一定不同的&#xff09;质数在 nums 中 下标 的 最大距离。 思路 正常筛即可 代码 Author: NEFU AB-IN Date: 2024-0…

解锁数据资产的无限潜能:深入探索创新的数据分析技术,挖掘其在实际应用场景中的广阔价值,助力企业发掘数据背后的深层信息,实现业务的持续增长与创新

目录 一、引言 二、创新数据分析技术的发展 1、大数据分析技术 2、人工智能与机器学习 3、可视化分析技术 三、创新数据分析技术在实际应用场景中的价值 1、市场洞察与竞争分析 2、客户细分与个性化营销 3、业务流程优化与风险管理 4、产品创新与研发 四、案例分析 …

【AHK】两句代码实现语音播报

操作系统&#xff1a;Windows10 源代码&#xff1a;AHK V2 spovice:ComObject("sapi.spvoice") spovice.Speak("世界你好") spovice.Speak("You can read simple text.")AHK v1 spovice:ComObjCreate("sapi.spvoice") spovice.Speak…

Python处理Excel文件的实用技巧使用详解

概要 在数据分析和处理的过程中,Excel 是一种广泛使用的数据存储和交换格式。Python 提供了多个强大的库来处理 Excel 文件,如 pandas、openpyxl 和 xlrd 等。本文将详细介绍如何使用这些库进行 Excel 文件的常用操作,包括读取、写入、修改和格式化等。 使用 pandas 处理 E…

仪器校准的概念与定义,计量校准是什么?

仪器校准的定义&#xff0c;在之前所颁布的《国际计量学词汇 基础和通用概念及相关术语》文件中&#xff0c;已经有了明确说明&#xff0c;而该文件做了修改以后&#xff0c;在后续新的定义中&#xff0c;仪器校准具体被分为两部分&#xff0c;第一步是将被计量仪器和计量校准的…

Unity发布PC限制本地访问exe次数

Unity发布PC限制本地访问exe次数 1.当打开次数大于3次时&#xff0c;unity会执行自动退出代码 int mi 1;//限制本地访问exe次数if (PlayerPrefs.GetInt("miwen") > 3){Application.Quit();}mi PlayerPrefs.GetInt("miwen");mi 1;PlayerPrefs.SetInt…

数据库测试数据准备厂商 Snaplet 宣布停止运营

上周刚获知「数据库调优厂商 OtterTune 宣布停止运营」。而今天下班前&#xff0c;同事又突然刷到另一家海外数据库工具商 Snaplet 也停止运营了。Snaplet 主要帮助开发团队在数据库中生成仿真度高且合规的测试数据。我们在年初还撰文介绍过它「告别手搓&#xff01;Postgres 一…

中英双语介绍北卡的研究三角区:Research Triangle Park (RTP)

中文版 研究三角区简介 研究三角区&#xff08;Research Triangle Park&#xff0c;简称RTP&#xff09;是美国最大的研究园区之一&#xff0c;位于北卡罗来纳州的罗利&#xff08;Raleigh&#xff09;、达勒姆&#xff08;Durham&#xff09;和教堂山&#xff08;Chapel Hil…

vue3中若v-model绑定的响应字段出现三级,该如何实现rules验证规则

比如以下内容&#xff1a; 配置的rules内容 const rulesref({title:[{required:true,message:"请输入标题",trigger:"blur"},{max:50,message:"最大不能超过256个字",trigger:"blur"}],Category:[{required:true,message:"请选择…

竹云位居首位 |沙利文《2024年全球及中国IAM中间件市场报告》正式发布

7月2日&#xff0c;弗若斯特沙利文&#xff08;Frost & Sullivan&#xff0c;以下简称“沙利文”&#xff09;正式发布《2024年全球及中国IAM中间件市场报告》&#xff08;以下简称“报告”&#xff09;&#xff0c;从行业背景、市场规模、驱动因素、发展趋势等维度阐述当前…

让采购和工程师们既爱又恨的任务——BOM

在项目研发与生产过程中&#xff0c;有一个常常让采购经理和工程师们既爱又恨的任务&#xff0c;那就是整理BBOMB。BOM作为连接设计与制造的桥梁&#xff0c;其重要性不言而喻&#xff0c;它详细列出了产品构成所需的所有零部件、材料及其规格、数量&#xff0c;是成本估算、采…

丘成桐证明的正质猜想使用反证法是错误的

丘成桐在证明“正质量猜想”时也是使用错误的“反证法”&#xff1a; 假定A&#xff0c;推出B&#xff0c;B与C矛盾&#xff0c;得到非A。 但是&#xff0c;这个C也是假设的。 根据反证法推理规则&#xff0c;两个前提与一个结论&#xff0c;必须有两个是真实的并且经过证实的…

ArcGIS Pro SDK (七)编辑 10 捕捉

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 10 捕捉 文章目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 10 捕捉1 配置捕捉 - 打开或关闭捕捉2 配置捕捉 - 应用程序捕捉模式3 配置捕捉 - 图层捕捉可捕捉性4 配置捕捉 - 图层捕捉模式5 配置捕捉 - 组合示例6 捕捉选项…

自然语言处理:第四十一章 解读大模型的参数

文章链接:7B&#xff1f;13B&#xff1f;175B&#xff1f;解读大模型的参数 (qq.com) 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新…

C++ | Leetcode C++题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int hammingWeight(uint32_t n) {int ret 0;while (n) {n & n - 1;ret;}return ret;} };

“深入解析:YUM仓库、RPM包与源码编译——Linux软件安装方式全面对比“

目录 YUM 仓库安装 概念&#xff1a; 优点&#xff1a; 缺点&#xff1a; RPM 包安装 概念&#xff1a; 优点&#xff1a; 缺点&#xff1a; 源码编译安装 概念&#xff1a; 优点&#xff1a; 缺点&#xff1a; 三者区别 YUM 仓库安装 概念&#xff1a; YUM&…

清新简约卡片风格蓝紫渐变色短视频苹果CMS模板

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板&#xff0c;一套苹果CMSV10主题。 这套主题是简约风格&#xff0c;以纯洁的白色和深邃的紫色为主色调&#xff0c;为您提供了一种清新、时尚的浏览体验。 在这个简洁而美丽的界面中&#xff0c;您可以轻松畅享各种精彩短…

从0开始学习pyspark--pyspark的数据读取[第4节]

在PySpark中&#xff0c;读取文件型数据是一个常见的操作&#xff0c;Spark支持多种数据格式&#xff0c;如CSV、JSON、Parquet、Avro等。以下是一些常用的方法来读取不同格式的文件数据。 读取文本型数据 读取CSV文件: 使用spark.read.csv方法读取CSV文件&#xff0c;可以通…

LeetCode //Bash - 194. Transpose File

194. Transpose File Given a text file file.txt, transpose its content. You may assume that each row has the same number of columns, and each field is separated by the ’ ’ character. Example: If file.txt has the following content: name age alice 21 r…