前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C++】面向对象编程引入 ② ( 面向对象编程 | 类的正确定义方式 | 类的错误定义方式 | 错误分析 )

【C++】面向对象编程引入 ② ( 面向对象编程 | 类的正确定义方式 | 类的错误定义方式 | 错误分析 )

作者头像
韩曙亮
发布2023-10-15 16:20:09
发布2023-10-15 16:20:09
14000
代码可运行
举报
运行总次数:0
代码可运行

一、类的正确定义方式

在上一篇博客中的 面向对象 编程中 , 将 现实世界中的 圆 抽象为 Circle 类 ;

代码语言:javascript
代码运行次数:0
运行
复制
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:
};

在 Circle 类中 , 定义了 三个成员变量 r , p , a 分别表示圆的 半径 , 周长 , 面积 ;

半径 r 需要通过 setR 方法 , 设置给 r 成员变量 ;

周长 p 和 面积 a 都是通过调用 caculate 成员方法计算的 ;

声明 Circle 对象之后 , 先调用 setR 方法设置圆半径 , 然后调用 caculate 函数计算出 周长和面积 , 最终才能获取到 圆 的周长 和 面积 ;

二、类的错误定义方式

如果不定义成员方法 , 直接定义变量 , 在定义变量时 , 计算圆的周长和面积 ;

代码语言:javascript
代码运行次数:0
运行
复制
class Circle
{
public:
	double r;	// 成员变量 半径
	double p = 2 * 3.14 * r;	// 成员变量 周长
	double a = 3.14 * r * r;	// 成员变量 面积
private:
protected:
};

运行完整的代码 :

代码语言:javascript
代码运行次数:0
运行
复制
// 包含 C++ 头文件
#include "iostream"

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

class Circle
{
public:
	double r;	// 成员变量 半径
	double p = 2 * 3.14 * r;	// 成员变量 周长
	double a = 3.14 * r * r;	// 成员变量 面积
private:
protected:
};


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


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

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

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

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

只能得到如下结果 :

三、错误分析

定义类 Circle 时 , 没有声明对象 , 并不分配内存 ;

使用 Circle c; 代码 声明 c 对象时 , 开始在 栈内存中为 Circle 对象分配内存 ;

分配内存时 , 同时也会对 对象 中的 成员变量赋值 ;

  • 首先 , 为成员变量 double r; 分配内存 , 之后对其赋值 , 由于开发者没有在声明类时赋值 , 此时是随机值 , 可能很大 , 也可能很小 ;
  • 然后 , 为成员变量 double p = 2 * 3.14 * r; 赋值 , 在上述 r 随机值的基础上 , 计算出一个 周长 p , 此时 p 也是随机值 ;
  • 最后 , 为成员变量 double a = 3.14 * r * r; 赋值 , 在上述 r 随机值的基础上 , 计算出一个 面积 a , 此时 a 也是随机值 ;

分配内存完毕后 , Circle c; 这行代码正式执行完毕 ;

执行

代码语言:javascript
代码运行次数:0
运行
复制
	// 从命令行标准输入得到的数据 到 变量 r 指示的内存空间中
	cin >> c.r;

代码 , 从命令行接收一个数值 , 赋值给 c 对象的 r 变量 , 此时 只修改 r 变量 , p 和 a 变量并没有修改 ;

下面的两行代码 , 只在初始化时执行 , 之后不会再执行 , 这就导致最后的 周长 p 和 面积 a 的值都是乱码 ;

代码语言:javascript
代码运行次数:0
运行
复制
	double p = 2 * 3.14 * r;	// 成员变量 周长
	double a = 3.14 * r * r;	// 成员变量 面积

之后打印计算结果 , 从 c 对象中获取 p 和 a 值 ,

代码语言:javascript
代码运行次数:0
运行
复制
	// 打印计算结果
	cout << "圆周长为 :" << c.p << " 圆面积为 : " << c.a << endl;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、类的正确定义方式
  • 二、类的错误定义方式
  • 三、错误分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档