20240414,类的嵌套,分文件实现

news2024/11/18 2:35:23

笑死,和宝哥同时生病了 

一,封装-案例

1.0 立方体类
#include<iostream>//分别用全局函数和成员函数判定立方体是否相等
using namespace std;

class Cube
{
public:
	int m_area;
	int m_vol;
	int geth(){return m_h;}
	int getl() { return m_l; }
	int getw() { return m_w; }
	void setcube(int h,int l,int w)
	{
		m_h = h;
		m_l = l;
		m_w = w;
	}
	int getarea(int h, int l, int w)
	{
		int area = 2 * (h * l + h * w + l * w);
		return area;
	}
	int getvolume(int h, int l, int w)
	{
		int vol = h * l * w;
		return vol;
	}
	int ifsamehlw(Cube c1, Cube c2)
	{
		if ((c1.m_h + c1.m_l + c1.m_w) == (c2.m_h + c2.m_l + c2.m_w))//和相等
		{
			if (c1.m_h != c2.m_h || c1.m_h != c2.m_l || c1.m_h != c2.m_w)//一条边相等
			{
				if (c1.m_l != c2.m_h || c1.m_l != c2.m_l || c1.m_l != c2.m_w)//两条边相等
				{
					return 1;
				}
			}
		}
		return 0;
	}
	int ifsamehlwtt(Cube &c2)//
	{
		if ((m_h + m_l + m_w) == (c2.m_h + c2.m_l + c2.m_w))//和相等
		{
			if (m_h != c2.m_h || m_h != c2.m_l || m_h != c2.m_w)//一条边相等
			{
				if (m_l != c2.m_h || m_l != c2.m_l || m_l != c2.m_w)//两条边相等
				{
					return 1;
				}
			}
		}
		return 0;
	}
private:
	int m_h;
	int m_l;
	int m_w;
};
bool ifsame(Cube& c1, Cube& c2);//不能放在类的前面!显示未设定的标识符
int main()
{
	Cube c1, c2;
	c1.setcube(3, 5, 6);
	c2.setcube(6, 5, 3);
	c1.m_area = c1.getarea(c1.geth(), c1.getl(), c1.getw());
	c1.m_vol= c1.getvolume(c1.geth(), c1.getl(), c1.getw());
	cout << "C1面积" << c1.m_area << "\tC1体积" << c1.m_vol << endl;

	c2.m_area = c2.getarea(c2.geth(), c2.getl(), c2.getw());
	c2.m_vol = c2.getvolume(c2.geth(), c2.getl(), c2.getw());
	cout << "C2面积" << c1.m_area << "\tC2体积" << c1.m_vol << endl;
	if (c1.ifsamehlw(c1, c2))//可以用,但是有点奇怪
	{
		cout << "xiangdneg" << endl;
	}
	if (c1.ifsamehlwtt(c2))//正常了,笑死
	{
		cout << "xiangdneg" << endl;
	}
	if (ifsame(c1, c2))//int &c1=c1;变量传入参数,用引用的方式接受,看不见的赋值运算
	{
		cout << "xiangdneg" << endl;
	}
	return 0;
	system("pause");
}

//bool逻辑
bool ifsame(Cube& c1, Cube& c2)//引用的方式传递,不会再拷贝一份数据了
{
	if (c1.geth() + c1.getl() + c1.getw() == c2.geth() + c2.getl() + c2.getw())//和相等
	{
		if (c1.geth() != c2.geth() || c1.geth() != c2.getl() || c1.geth() != c2.getw())//一条边相等
		{
			if (c1.getl() != c2.geth() || c1.getl() != c2.getl() || c1.getl() != c2.getw())//两条边相等
			{
				return true;
			}
		}
	}
	return false;
}
1.1 点和⚪关系
0.1 没有嵌套
#include<iostream>//判断点和圆的位置关系
using namespace std;
class Circle
{
	int c_x;
	int c_y;
	int c_r;
public:
	void setc(int x, int y, int r)
	{
		c_x = x;
		c_y = y;
		c_r = r;
	}
	int getcx() { return c_x; };
	int getcy() { return c_y; };
	int getcr() { return c_r; };
};
class Point
{
	int p_x;
	int p_y;
public:
	void setp(int x, int y)
	{
		p_x = x;
		p_y = y;
	}
	int getpx() { return p_x; };
	int getpy() { return p_y; };
};
void relaction(Circle& c, Point& p);
int main()
{
	Circle c;
	Point p,p1;
	c.setc(0, 0, 10);
	p.setp(10, 0);
	p1.setp(11, 0);
	relaction(c, p);
	relaction(c, p1);
	return 0;
	system("pause");
}

void relaction(Circle &c, Point &p)
{
	int distance = (c.getcx() - p.getpx()) * (c.getcx() - p.getpx()) +
		(c.getcy() - p.getpy()) * (c.getcy() - p.getpy());
	int rdistance = c.getcr() * c.getcr();
	if (distance == rdistance)
	{
		cout << "点("<<p.getpx()<<","<<p.getpy()<<")在圆上" << endl;
	}
	else if (distance > rdistance)
	{
		cout << "点(" << p.getpx() << "," << p.getpy() << ")在圆外" << endl;
	}
	else
	{
		cout << "点(" << p.getpx() << "," << p.getpy() << ")在圆内" << endl;
	}
}
0.2 嵌套类
#include<iostream>//判断点和圆的位置关系
using namespace std;
class Point
{
	int p_x;
	int p_y;
public:
	void setp(int x, int y)
	{
		p_x = x;
		p_y = y;
	}
	int getpx() { return p_x; };
	int getpy() { return p_y; };
};
class Circle
{
	Point c_center;
	int c_r;
public:
	void setcr( int r)
	{
		c_r = r;
	}
	void setcenter(Point &center)
	{
		c_center = center;//两个点类相等就行
	}
	Point getcenter()
	{
		return c_center;
	}
	/*不对—不能直接访问点C_CENTER,只能通过行为访问
	int getcx() { return c_center.getpx(); };
	int getcy() { return c_center.getpy(); };*/
	int getcr() { return c_r; };
};
void relaction(Circle& c, Point& p);
int main()
{
	Circle c;
	Point p,p1,p2,center;
	//c.c_center.setp(0, 0);不可访问
	center.setp(0, 0);
	p.setp(10, 0);
	p1.setp(9, 0);
	p2.setp(12, 0);
	//初始化圆类
	c.setcr(10);
	c.setcenter(center);

	relaction(c, p);
	relaction(c, p1);
	relaction(c, p2);
	return 0;
	system("pause");
}

void relaction(Circle &c, Point &p)
{
	int distance = (c.getcenter().getpx() - p.getpx()) * (c.getcenter().getpx() - p.getpx()) +
		(c.getcenter().getpy() - p.getpy()) * (c.getcenter().getpy() - p.getpy());
	int rdistance = c.getcr() * c.getcr();
	if (distance == rdistance)
	{
		cout << "点("<<p.getpx()<<","<<p.getpy()<<")在圆上" << endl;
	}
	else if (distance > rdistance)
	{
		cout << "点(" << p.getpx() << "," << p.getpy() << ")在圆外" << endl;
	}
	else
	{
		cout << "点(" << p.getpx() << "," << p.getpy() << ")在圆内" << endl;
	}
}
0.3 嵌套且分文件

调试的时候发现,全局函数运行的时候,每到一个局部函数就会跳到类里面执行,就还蛮好玩的乐 ,今天就学这么多吧,噶

#pragma once//防止重复包含
#include <iostream>
using namespace std;

//头文件只保存声明
class Point
{
	int p_x;
	int p_y;
public:
	void setp(int x, int y);
	
	int getpx();
	int getpy();
};
#pragma once
#include <iostream>
#include "point.h"
using namespace std;

class Circle
{
	Point c_center;
	int c_r;
public:
	void setcr(int r);
	void setcenter(Point& center);
	Point getcenter();
	int getcr() ;
};
#include "point.h"

//只保留行为语句,函数的实现

void Point::setp(int x, int y)//加上作用域,不加上就是全局函数
{
	Point::p_x = x;
	Point::p_y = y;
}
int Point::getpx() { return Point::p_x; }
int Point::getpy() { return Point::p_y; }
#include "point.h"
#include "circle.h"

void Circle::setcr(int r)
{
	Circle::c_r = r;
}
void Circle::setcenter(Point& center)
{
	Circle::c_center = center;//两个点类相等就行
}
Point Circle::getcenter()
{
	return Circle::c_center;
}
int Circle::getcr(){ return Circle::c_r; }

 

#include<iostream>//判断点和圆的位置关系
using namespace std;
#include "point.h"
#include "circle.h"

void relaction(Circle& c, Point& p);
int main()
{
	Circle c;
	Point p,p1,p2,center;
	//c.c_center.setp(0, 0);不可访问
	center.setp(0, 0);
	p.setp(10, 0);
	p1.setp(9, 0);
	p2.setp(12, 0);
	//初始化圆类
	c.setcr(10);
	c.setcenter(center);

	relaction(c, p);
	relaction(c, p1);
	relaction(c, p2);
	return 0;
	system("pause");
}

void relaction(Circle &c, Point &p)
{
	int distance = (c.getcenter().getpx() - p.getpx()) * (c.getcenter().getpx() - p.getpx()) +
		(c.getcenter().getpy() - p.getpy()) * (c.getcenter().getpy() - p.getpy());
	int rdistance = c.getcr() * c.getcr();
	if (distance == rdistance)
	{
		cout << "点("<<p.getpx()<<","<<p.getpy()<<")在圆上" << endl;
	}
	else if (distance > rdistance)
	{
		cout << "点(" << p.getpx() << "," << p.getpy() << ")在圆外" << endl;
	}
	else
	{
		cout << "点(" << p.getpx() << "," << p.getpy() << ")在圆内" << endl;
	}
}

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

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

相关文章

vue 上传csv文件

index---------主页面&#xff08;图1&#xff09; form-----------子页面&#xff08;图2&#xff09; index.vue /** 重点&#xff01;&#xff01;&#xff01;&#xff01; * 获取表单组件传递的信息&#xff0c;传给后端接口 * param {从form表单传递的数据} datas * Fi…

反射与动态代理

一、反射 什么是反射? 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问 1.获取class对象的三种方式 Class这个类里面的静态方法forName&#xff08;“全类名”&#xff09;&#xff08;最常用&#xff09; 通过class属性获取 通过对象获取字节码文件对…

day9 | 栈与队列 part-1 (Go) | 232 用栈实现队列、225 用队列实现栈

今日任务 栈与队列的理论基础 (介绍:代码随想录)232 用栈实现队列(题目: . - 力扣&#xff08;LeetCode&#xff09;)225 用队列实现栈 (题目: . - 力扣&#xff08;LeetCode&#xff09; ) 栈与队列的理论基础 栈 : 先进后出 队列: 后进先出 老师给的讲解:代码随想录 …

stm32f103---按键控制LED---代码学习

目录 一、总体代码 二、LED端口初始化分析 ​编辑 三、LED灭的控制 四、LED亮 五、按键初始化 ​ 六、按键控制LED的功能 一、总体代码 这里使用到了LED灯和按键&#xff0c;实现效果是当按键按下时灯的亮灭转化 #include "stm32f10x.h" #include "bsp_led…

Jupyter Notbook如何安装配置并结合内网穿透实现无公网IP远程连接使用

文章目录 推荐1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…

《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)

1.简介 TestNG为日志记录和报告提供的不同选项。现在&#xff0c;宏哥讲解分享如何开始使用它们。首先&#xff0c;我们将编写一个示例程序&#xff0c;在该程序中我们将使用 ITestListener方法进行日志记录。 2.TestNG自定义日志 2.1创建测试用例类 1.按照宏哥前边的方法&…

TensorFlow中LSTM神经网络详解

TensorFlow中LSTM神经网络详解 一、LSTM神经元1.1 神经网络引入1.2 RNN神经元结构1.3 LSTM神经元1.3.1 LSTM模型框架1.3.2 隐藏态1.3.3 遗忘门1.3.4 记忆门1.3.5 输出门 二、LSTM神经网络2.1 LSTM网络架构 时间序列预测分析可以实现对未来数据的预测分析&#xff0c;通过分析过…

安装mamba_ssm报错

最近想跑一下VM-UNet的代码&#xff0c;结果发现需要安装mamba_ssm&#xff0c;于是我直接pip install mamba_ssm,发现报错&#xff0c;错误提示说需要安装cuda11.6及以上的版本。然后我就默默地安装cuda11.6&#xff0c;后来我才发现不用安装cuda11.6也可以。 在vmunet的gitu…

【笔记】mysql版本6以上时区问题

前言 最近在项目中发现数据库某个表的createTime字段的时间比中国时间少了13个小时&#xff0c;只是在数据库中查看显示时间不对&#xff0c;但是在页面&#xff0c;又是正常显示中国时区的时间。 排查 项目中数据库的驱动使用的是8.0.19&#xff0c;驱动类使用的是com.mysq…

快速入门深度学习9.1(用时20min)——GRU

速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元&#xff08;GRU&#xff09;9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 20…

数据结构学习之路--一网打尽链表的相关操作(附C源码)

嗨嗨大家~我们今天继顺序表内容来讲解链表。话不多说&#xff0c;让我们走进本期的学习吧&#xff01; 目录 一、线性表的链式存储 1 链式存储结构 2 链表的定义 3 链表的分类 二、链表的实现过程 1 链表的打印 2 结点的创建 3 链表的头插 4 链表的头删 5 链表的…

vue列表列表过滤

对已知的列表进行数据过滤(根据输入框里面的内容进行数据过滤) 编写案例 通过案例来演示说明 效果就是这样的 输入框是模糊查询 想要实现功能&#xff0c;其实就两大步&#xff0c;1获取输入框内容 2根据输入内容进行数据过滤 绑定收集数据 我们可以使用v-model去双向绑定 …

LazyVim开发vue2

neovim 0.5刚出来的时代&#xff0c;那时刚有lua插件我很狂热。每天沉迷于打造自己的IDE之中。写过一堆相关的博客&#xff0c;也录过一些视频教程。后来发现neovim的接口和插件更新的很快&#xff0c;导致配置文件要不定期的修改&#xff0c;才能保证新版本的插件的适配。我也…

深入理解DES算法:原理、实现与应用

title: 深入理解DES算法&#xff1a;原理、实现与应用 date: 2024/4/14 21:30:21 updated: 2024/4/14 21:30:21 tags: DES加密对称加密分组密码密钥管理S盒P盒安全性分析替代算法 DES算法简介 历史 DES&#xff08;Data Encryption Standard&#xff09;算法是由IBM研发&…

llamafactory:unified efficient fine-tuning of 100+ lanuage models

1.introduction llamafactory由三个主要模块组成&#xff0c;Model Loader&#xff0c;Data Worker&#xff0c;Trainer。 2.Efficient fine-tuning techniques 2.1 Efficient Optimization 冻结微调&#xff1a;冻结大部分参数&#xff0c;同时只在一小部分解码器层中微调剩…

Python怎么算平方

Python怎么算平方&#xff1f;下面是算平方的三种方法&#xff1a; 方法一&#xff1a;使用内置模块 >>> import math >>> math.pow(12, 2) # 求平方 144.0 方法二&#xff1a;使用表达式 >>> 12 ** 2 # 求平方 144 方法三&#…

量子城域网系列(三):搭建一个点对点量子保密通信网络

各位小伙伴周末愉快呀&#xff0c;今天是4月14日世界量子日&#xff0c;至于为今天是世界量子日可以围观我之前的文章&#xff1a;关于世界量子日。 之前的文章中我们讨论了量子密钥在通信系统各层协议中的应用&#xff0c;那在实际工程中如何真正落地一个量子加密网络呢&a…

minikube环境搭建

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

Jmeter杂记:测试计划参数详解

测试计划各参数详解 1&#xff0c;用户自定义变量&#xff0c;是全局变量&#xff0c;供所有线程组使用&#xff0c;可用配置元件&#xff1a;用户自定义变量替代 2&#xff0c;连续的运行线程组&#xff0c;默认不勾选&#xff0c;则随机的运行多个线程组中的取样器&#xff…

什么是享元模式,有哪些具体应用

一、定义 享元模式是一种通过尽可能多地共享数据来最小化内存使用和对象数量&#xff0c;从而提高性能的设计模式。在享元模式中&#xff0c;如果需要相同数据的多个对象&#xff0c;则共享这些对象而不是创建新的对象&#xff0c;从而提高系统的效率。 其实有很多应用场景&am…