【C++】面向对象编程引入 ( 面向过程编程 | 查看 iostream 依赖 | 面向对象编程 )

2023-08-16 20:02:14





一、面向过程编程



给定 圆 的 半径 , 求该圆 的 周长 和 面积 ;

半径为 r r r , 周长就是 2 π r 2 \pi r 2πr , 面积是 π r 2 \pi r^2 πr2 ;


使用 面向过程 的方法解决上述问题 , 只能是令程序顺序执行 , 如果要求多个圆的面积 , 则需要重复执行过程代码 ;


代码示例 :


// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

int main() 
{
	// 定义圆半径 , 周长 , 面积 对应的变量
	double r = 0, p = 0, a = 0;

	// 提示输入圆半径
	cout << "输入圆半径 :" << endl;

	// 从命令行标准输入得到的数据 到 变量 r 指示的内存空间中
	cin >> r;
	cout << "接收到圆半径 :"<< r << endl;

	// 计算圆周长
	p = 3.14159 * 2 * r;

	// 计算圆面积
	a = 3.14159 * r * r;

	// 打印计算结果
	cout << "圆周长为 :" << p << " 圆面积为 : " << a << endl;

	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
}

执行结果 : 输入半径 10 , 计算出了对应的周长 和 面积 ;

输入圆半径 :
10
接收到圆半径 :10
圆周长为 :62.8318 圆面积为 : 314.159
Press any key to continue . . .

在这里插入图片描述

在这里插入图片描述





二、查看 iostream 依赖



在上个章节的代码中 , 使用了 cout 和 cin 两个标准流 ,

  • 将数据输出到 cout 标准输出流中 , 使用 cout << 输出内容 实现 ;
  • 将数据从 cin 标准输入流中读取到内存中, 使用 cin >> 内存空间 实现 ;

<< 是输出数据到输出流中 , >> 是输入数据到内存中 ;

记住的方法是 : 标准流 cin 和 cout 始终在 左边 , << 和 >> 是 数据的方向 ;


cin 和 cout 都定义在 iostream 中 , 可以在 Visual Studio 2019 的 解决方案资源管理器 中的 项目下的 " 外部依赖 " 中查看 iostream 标准流 定义 ;

在这里插入图片描述
双击 展开 " 外部依赖项 " , 可以查看 iostream 的完整代码 ;

在这里插入图片描述





三、面向对象编程



给定 圆 的 半径 , 求该圆 的 周长 和 面积 ;

半径为 r r r , 周长就是 2 π r 2 \pi r 2πr , 面积是 π r 2 \pi r^2 πr2 ;


使用 面向对象 的 方式 , 解决上述问题 ;

  • 首相 , 将 事物 进行抽象 , 这里将 圆 定义为一个 数据类型 ;
  • 然后 , 在 圆 类型中 , 定义 成员属性 半径 , 周长 , 和 面积 ;
  • 最后 , 在 圆 类型中 , 定义两个 成员函数 , 分别根据 半径 求出 周长 和 面积 ;

代码示例 :


// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

class Circle
{
public:
	double r;	// 成员变量 半径
	double p;	// 成员变量 周长
	double a;	// 成员变量 面积

	// 成员方法 设置半径
	void setR(double r1) 
	{
		r = r1;
	}

	// 成员方法 计算圆周长和面积
	void caculate()
	{
		p = 3.14159 * r * 2;
		a = 3.14159 * r * r;
	}

	// 获取圆周长
	double getP()
	{
		return p;
	}

	// 获取圆面积
	double getA()
	{
		return a;
	}
private:
protected:
};


int main() 
{
	// 定义圆对象
	Circle c;
	double r;


	// 提示输入圆半径
	cout << "输入圆半径 :" << endl;

	// 从命令行标准输入得到的数据 到 变量 r 指示的内存空间中
	cin >> r;
	cout << "接收到圆半径 :"<< r << endl;

	// 给 圆 对象 c 设置半径
	c.setR(r);
	// 计算圆 周长 和 面积
	c.caculate();

	// 打印计算结果
	cout << "圆周长为 :" << c.getP() << " 圆面积为 : " << c.getA() << endl;

	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
}

执行结果 :

输入圆半径 :
10
接收到圆半径 :10
圆周长为 :62.8318 圆面积为 : 314.159
Press any key to continue . . .

在这里插入图片描述
在这里插入图片描述
在上述代码中 , 定义了 Circle 类 ,

class Circle
{
	...
}

此时 Circle 是一个数据类型 , 编译器并没有为其分配内存 ;

定义 Circle 对象 c 时 , 才为该 c 对象在 内存中分配内存 , 注意该内存是在 栈内存 中分配内存 ;

	// 定义圆对象
	Circle c;

如果定义 Circle *c 对象 , 则需要为其分配内存 , 该内存是在堆内存中的内存 ;

更多推荐

Unix和Linux、GNU和GPL、RHEL和Centos、Debian和Ubuntu

文章目录Unix和LinuxGNU和GPLGNU/Linux名称的来源RHEL和CentosDebian和Ubuntu以上都是操作系统,服务器操作系统、桌面操作系统。对于刚刚接触Linux系统或者从事运维相关工作的人来说,肯定会听过很多名词,但是不知道他们的区别和联系,比如Unix和Linux、RHEL和Centos等

【JVM】经典垃圾收集器

文章目录说明新生代收集器Serial收集器ParNew收集器ParallelScavenge收集器老年代收集器SerialOld收集器ParallelOld收集器CMS收集器GarbageFirst收集器需要解决的问题运作过程CMS和G1的区别说明Java中有许多垃圾收集器(GarbageCollector,GC)可供

程序员基操——如何应对需求变更的“范畴”和“形状”

前言架构整洁之道读后感,随笔原文引用有删减,虽然我认为原文每一个字都很有价值,值得推敲,但是考虑到自己程序员的身份,必须懒点,才能融入大家喜欢交流的小伙伴私信加群引用文字为了达到软件的本来目的,软件系统必须够“软”——也就是说,软件应该容易被修改。当需求方改变需求的时候,随之所需的软件变更必须可以简单而方便地实现。变更

docker day05

昨日内容回顾:-dockerfile的优化-编译速度-充分利用缓存镜像,将不常变更的指令放在靠前的位置;-在不影响功能的前提下,最好是可以合并多条指令,可以减少中间容器或者镜像的产生;-软件源最高更换国内较稳定的软件源,相比国外的软件源速度会更快;-使用".dockerignore"文件忽略Dockerfile编译不需

python爬虫爬取电影数据并做可视化

思路:1、发送请求,解析html里面的数据2、保存到csv文件3、数据处理4、数据可视化需要用到的库:importrequests,csv#请求库和保存库importpandasaspd#读取csv文件以及操作数据fromlxmlimportetree#解析html库frompyecharts.chartsimport

期权是什么?一分钟带你玩转期权策略!

很多人问我期权是什么,这个问题怎么回答呢?首先期权是一种交易模式,如同股票期货一样,但它又不同于股票和期货,因为它有自己的交易规则和特性,期权更多是一种工具,可以做空大盘对冲下跌风险,下文解答期权是什么?一分钟带你玩转期权策略!本文来自:期权酱期权,又叫选择权,是一份合约,给予期权买家在特定日期或之前以特定价格买入或卖

【Git】02-Git常见应用

文章目录1.删除不需要分支2.修改最新Commit的Message3.修改之前Commit的Message4.连续多个Commit整理为一个5.不连续的Commit整理为一个6.比较暂存区和HEAD中文件差异7.比较工作区和暂存区中文件差异8.将暂存区恢复为HEAD相同9.工作区文件恢复和暂存区相同10.取消暂存区部分

Jenkins自动化:简化部署流程

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

【Flutter】Flutter 使用 RxDart 实现异步编程

文章目录一、前言二、版本信息三、RxDart简介四、RxDart的基本使用1.Stream类2.扩展方法3.Subjects五、RxDart的实战应用1.实例一:使用RxDart实现事件缓冲2.实例二:使用RxDart实现事件合并六、总结一、前言欢迎来到这篇关于RxDart的入门文章。在这篇文章中,我们将一起探索RxD

Redis理解

文章目录针对小林Coding图解Redis做的自己的理解:数据类型篇Redis常用数据类型和应用场景StringListHashSetZsetBitMapHyperLogLogGEOStream持久化篇AOF持久化是怎么实现的AOF日志三种写回策略AOF重写机制RDB快照是怎么实现的RDB快照执行快照时,数据能被修改吗

腾讯云AI超级底座新升级:训练效率提升幅度达到3倍

大模型推动AI进入新纪元,对计算、存储、网络、数据检索及调度容错等方面提出了更高要求。在9月7日举行的2023腾讯全球数字生态大会“AI超级底座专场”上,腾讯云介绍异构计算全新产品矩阵“AI超级底座”及其新能力。腾讯云副总裁王亚晨在开场致辞中表示,AI大模型就像是一场F1比赛,腾讯云专门设计了星脉高性能算力网络“赛道”

热文推荐