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

笑死,和宝哥同时生病了 

一,封装-案例

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;
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【群智能算法改进】一种改进的火鹰优化算法 改进的IFHO算法【Matlab代码#77】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始火鹰优化算法1.1 种群初始化1.2 火鹰点火阶段1.3 猎物移动阶段 2. 改进的火鹰优化算法2.1 Tent映射种群初始化2.2 非线性复合自适应惯性权重随机抉择策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源…

大模型实战案例:8卡环境微调马斯克开源大模型 Grok-1

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

【LeetCode: 705. 设计哈希集合 + 数据结构设计】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

免费VPS云服务器汇总,最长永久免费使用

目前云服务器市场竞争很激烈&#xff0c;为了方便吸引上云&#xff0c;很多云计算服务商提供免费试用云服务器&#xff0c;下面给大家整理汇总一下免费VPS云服务器&#xff0c;最长永久免费使用&#xff01; 一、雨云&#xff08;优惠码:ABC&#xff09; 活动地址&#xff1a;…

通讯录的实现(顺序表版本)

我们知道通讯录是基于顺序表的前提下&#xff0c;要写好通讯录我们就要深入了解好顺序表。我们先来看看什么是顺序表。&#xff08;注意今天代码量有点多&#xff0c;坚持一下&#xff09;。冲啊&#xff01;兄弟们&#xff01; 顺序表的简单理解 对于顺序表&#xff0c;我们首…

软件测试 测试开发丨Pytest结合数据驱动-yaml,熬夜整理蚂蚁金服软件测试高级笔试题

编程语言 languages: PHPJavaPython book: Python入门: # 书籍名称 price: 55.5 author: Lily available: True repertory: 20 date: 2018-02-17 Java入门: price: 60 author: Lily available: False repertory: Null date: 2018-05-11 yaml 文件使用 查看 yaml 文件 pych…

2024.4.19 Python爬虫复习day07 可视化3

综合案例 需求: 已知2020年疫情数据,都是json数据,需要从文件中读出,进行处理和分析,最终实现数据可视化折线图 相关知识点: json json简介: 本质是一个特定格式的字符串 举例: [{},{},{}] 或者 {}python中json包: import jsonpython数据转为json数据: 变量接收json…

刷题之Leetcode206题(超级详细)

206.反转链表 力扣题目链接(opens new window)https://leetcode.cn/problems/reverse-linked-list/ 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表&#xff0…

Linux文本编辑器vim使用和分析—2

目录 1.对vim的简单理解&#xff1a; 2.看待vim的视角&#xff1a; 3.命令模式&#xff1a; 3.1vim被打开后默认的模式&#xff1a; 3.2命令模式切换插入模式&#xff1a; 3.3其他模式回到命令模式&#xff1a; 3.4光标定位&#xff1a; 4.插入模式(编辑模式)&#xff1…

赋能未来:AI技术革新中的创业契机

目录 前言 一、行业解决方案 1、行业参考说明 2、操作步骤建议 二、智能产品和服务 1、行业参考说明 2、操作步骤建议 三、教育和培训 1、行业参考说明 2、操作步骤建议 总结 前言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;越来越多的创业…

【Java】新手一步一步安装 Java 语言开发环境

文章目录 一、Windows 10 系统 安装 JDK8二、 Mac 系统 安装 JDK8三、IDEA安装 一、Windows 10 系统 安装 JDK8 &#xff08;1&#xff09;打开 JDK下载网站&#xff0c;根据系统配置选择版本&#xff0c;这里选择windows 64位的版本&#xff0c;点击下载&#xff08;这里需要…

音频变速python版

音频变速 如何能在不改变音频其他特点的情况下&#xff0c;只改变语速呢&#xff1f; 有几个python的库可以实现该功能&#xff0c;下面一一介绍。 pydub库 首先&#xff0c;确保安装了pydub和ffmpeg。 下面是一个简单的Python脚本&#xff0c;展示如何改变音频的播放速度&a…

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

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

论文笔记:Teach LLMs to Phish: Stealing Private Information from Language Models

iclr 2024 reviewer 评分 588 1 intro 提出了一种“神经网络钓鱼攻击” 一种新的针对在敏感用户数据上训练或finetune的LLMs的攻击向量攻击者将看似无害的投毒数据插入到模型的训练数据集中&#xff0c;以“教会LLMs进行钓鱼”&#xff0c;即诱导模型记住他人的个人身份信息&…

DAY9|28. 实现 strStr()、459.重复的子字符串

28.实现 strStr&#xff08;&#xff09;、459重复的子字符串 28. 实现 strStr()减一版next数组时间复杂度分析前缀表统一减一 C代码实现前缀表&#xff08;不减一&#xff09;C实现 459.重复的子字符串移动匹配KMP前缀表统一减一前缀表&#xff08;不减一&#xff09;的C代码实…

从零自制docker-10-【cgroup进行容器资源限制】

文章目录 目的导入包的相关公开原则当前进程的挂载信息deferfor scanner.Scan()判断字符串包含新建的cgroup的默认文件cpu相关配置对应到ubuntu 22.04版本的cpu相关配置top注意查看你可使用的cpu注意坑启动后的top查看显示进程使用的cpu序号代码结果 目的 启动容器时通过-mem、…

Day23_学点儿JSON_定义、数据格式、和XML比较、插件

1 JSON定义 定义&#xff1a;是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点&#xff1a; 易于程序员阅读和编写。易于计算机解析和生成。其实是javascript的子集&#xff1a;原生javascript支持JSON <script type"text/javascript">…

带头节点单向非循环链表的基本操作(c语言实现)

头节点 头节点是数据结构中的一个概念&#xff0c;特别是在链表结构中。 它通常被设置为链表的第一个节点之前的一个节点&#xff0c;其数据域一般不存储链表中的实际数据&#xff0c;而它的指针域则存储指向链表中第一个实际节点的指针。 头节点的主要作用如下&#xff1a;…

Pandas相比Excel的优势是哪些?

熟悉Pandas的同学会知道&#xff0c;Pandas相当于Python中的Excel&#xff0c;都是基于二维表的进行数据处理分析&#xff0c;不同的是&#xff0c;Pandas基于代码操作数据&#xff0c;Excel是图形化的分析工具。 不少人会问Excel比Pandas更简单&#xff0c;为什么还要学习Pan…

【NLP】大语言模型基础之Transformer结构

大语言模型基础之Transformer结构 1. Transformer结构总览2. 嵌入表示层2. 注意力层3. 前馈层4. 残差连接与层归一化5. 编码器和解码器结构参考文献 Transformer是一种深度学习模型架构&#xff0c;由Vaswani等人于2017年在论文《Attention is All You Need》中首次提出。它在自…