【C++】类和对象-封装

news2024/11/19 17:30:01

1.属性和行为作为整体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.示例2-设计学生类

在这里插入图片描述

3.访问权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.class和struct的区别

在这里插入图片描述
在这里插入图片描述

5.成员属性设置为私有

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.设计案例1-立方体类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在main函数前重新补上isSame函数
在这里插入图片描述

在Cube类里面添加issamebyclass,利用成员函数判断两个立方体是否相等
在这里插入图片描述
在这里插入图片描述

自己写的代码:

#include <iostream>
using namespace std;

class Cube {
public:	//行为
	void setL(int l) {
		m_L = l;
	}
	int getL() {
		return m_L;
	}

	void setW(int w) {
		m_W= w;
	}
	int getW() {
		return m_W;
	}

	void setH(int h) {
		m_H = h;
	}
	int getH() {
		return m_H;
	}

	int calculateS() {
		return 2 * (m_L * m_W + m_L * m_H + m_H * m_W);
	}

	int calculateV() {
		return m_L * m_W * m_H;
	}

	bool IsSameByClass(Cube& c) {
		if (getL() == c.getL() && getW() == c.getW() && getH() == c.getH()) {
			return true;
		}
		return false;
	}

private://属性
	int m_L, m_W, m_H;
};

bool IsSame(Cube& c1, Cube& c2){
	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()) {
		return true;
	}
	return false;
}

int main()
{
	Cube c1;
	c1.setL(10), c1.setW(10), c1.setH(10);
	cout << "c1_L=" << c1.getL() << "\tc1_W=" << c1.getW() << "\tc1_H=" << c1.getH()<<endl;
	cout << "c1_S=" << c1.calculateS() << "\tc1_V=" << c1.calculateV() << endl<<endl;

	Cube c2;
	c2.setL(10), c2.setW(10), c2.setH(10);
	cout << "c2_L=" << c2.getL() << "\tc2_W=" << c2.getW() << "\tc2_H=" << c2.getH() << endl;
	cout << "c2_S=" << c2.calculateS() << "\tc2_V=" << c2.calculateV() << endl << endl;

	bool flag = IsSame(c1,c2);
	if (flag) {
		cout << "两个立方体相等。" << endl << endl;
	}
	else {
		cout << "两个立方体不相等。" << endl<<endl;
	}

	bool flag_2 = c1.IsSameByClass(c2);
	if (flag_2) {
		cout << "BYclass两个立方体相等。" << endl << endl;
	}
	else {
		cout << "BYclass两个立方体不相等。" << endl << endl;
	}


	system("pause");

	return 0;
}

在这里插入图片描述

7.设计案例2-点和圆的关系

B站视频链接:
https://www.bilibili.com/video/BV1et411b73Z/?p=105&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=fb8dcae0aee3f1aab700c21099045395
在这里插入图片描述

main.cpp

#include <iostream>
using namespace std;

#include "circle.h"
#include "point.h"
//class Point {
//public:
//	void setX(float x) {
//		m_X = x;
//	}
//	float getX() {
//		return m_X;
//	}
//
//	void setY(float y) {
//		m_Y = y;
//	}
//	float getY() {
//		return m_Y;
//	}
//	
//private:
//	float m_X, m_Y;
//};

//class Circle {
//public:	//行为
//	void setR(float r) {
//		m_R = r;
//	}
//	float getR() {
//		return m_R;
//	}
//
//	void setCenter(Point center) {
//		m_Center = center;
//	}
//	Point getCenter() {
//		return m_Center;
//	}
//
//private://属性
//	Point m_Center;
//	float m_R;
//};

void isInCircle(Circle& c, Point& p) 
	{
	float r = sqrt(pow(c.getCenter().getX() - p.getX(), 2) +
		pow(c.getCenter().getY() - p.getY(), 2));
		if (pow(c.getR(), 2) < pow(r, 2)) 
		{
			cout << "点在圆外" << endl;
		}
	    else if (pow(c.getR(), 2) == pow(r, 2)) 
		{
			cout << "点在圆上" << endl;
		}
		else if (pow(r, 2) == 0)
		{
			cout << "点是圆心" << endl;
		}
		else
		{
			cout << "点在圆内" << endl;
		}
}

int main()
{
	Point p;
	p.setX(0);
	p.setY(9);
	Point center;
	center.setX(0);
	center.setY(0);
	
	Circle c;
	c.setCenter(center);
	c.setR(2);

	isInCircle(c, p);

	system("pause");

	return 0;
}

point.h

#pragma once
#include <iostream>
using namespace std;

class Point {
public:
	void setX(float x);
	float getX();

	void setY(float y);
	float getY();

private:
	float m_X, m_Y;
};

point.cpp

#include "point.h"


	void Point::setX(float x) {
		m_X = x;
	}
	float Point::getX() {
		return m_X;
	}

	void Point::setY(float y) {
		m_Y = y;
	}
	float Point::getY() {
		return m_Y;
	}

circle.h

#pragma once
#include <iostream>
using namespace std;
#include "point.h"

class Circle {
public:	//行为
	void setR(float r);
	float getR();

	void setCenter(Point center);
	Point getCenter();

private://属性
	Point m_Center;
	float m_R;
};

circle.cpp

#include "circle.h"



	void Circle::setR(float r) {
		m_R = r;
	}
	float Circle::getR() {
		return m_R;
	}

	void Circle::setCenter(Point center) {
		m_Center = center;
	}
	Point Circle::getCenter() {
		return m_Center;
	}

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

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

相关文章

开放式耳机怎么选?值得入手的开放式耳机有哪些

与封闭式耳机相比&#xff0c;开放式耳机具有更为自然、真实的音质&#xff0c;能够更好地还原音乐现场的声音环境。以下是几款值得推荐的开放式耳机&#xff0c;都来看看有哪些吧。 Top1、NANK南卡00压开放式耳机 推荐理由&#xff1a;死磕开放式传音技术&#xff0c;音质和…

(十四)InfluxDB仪表盘

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 14 章 InfluxDB仪表盘 14.1 什么是InfluxDB仪表盘 1、前面已经给大家介绍过InfluxDB的仪表盘功能了。点击…

免费数据恢复方法?这3个不要错过!

朋友们&#xff01;本人是个超级马虎的职场新手&#xff0c;在处理工作的时候总是容易误删重要的报表&#xff01;要知道我光是做一个报表就要花很长时间。大家有什么免费数据恢复的方法给我推荐推荐吗&#xff1f;感谢&#xff01;” 在使用电脑时&#xff0c;我们会在电脑中保…

性能测试工具 Jmeter 引入 jar 包踩过的坑

目录 前言&#xff1a; Jmeter 中调用自己编写 jar 中的类出错 错误日志&#xff1a; 出现以上错误的原因&#xff1a; 解决方法&#xff1a; 前言&#xff1a; JMeter 是一种开源的性能测试工具&#xff0c;可以帮助我们快速地进行网站、应用程序等的性能测试和压力测试…

SSM企业固定资产智能管理系统的设计与实现【纯干货分享,M免费领取源码06298】

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对企业固定资产智能管理系统等问题&#xff0c…

计算机系统结构-多处理机

概念&#xff0c;多处理机指的是&#xff0c;多台含cpu的机器共享一个存储器。 &#xff08;可以通过网络宽带&#xff0c;也可以通过线直连这个存储器。当然他们也可以有自己的私有存储器或者高速缓存&#xff09; 几个cpu公用一个总线&#xff0c;没问题。但是如果十几个cpu…

系统学习Linux-MySQL语句(二)

一、SQL语句类型 DDLDDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;&#xff1a;用于定义数据库中的各种对象&#xff0c;包括数据库、表、视图、触发器等&#xff0c;常见的 DDL 命令有 CREATE、ALTER、DROPDMLDML&#xff08;Data Manipulat…

YOLOv1论文细节总结(confidence)

总结几个细节点&#xff1a; 1、置信度计算&#xff1a; 训练时&#xff1a; 测试时置信度&#xff0c;这里网络输出仍然是 以上是各大博文讲解时列出的也是论文中提到的公式&#xff0c;但其实最清楚的是下面这段文字讲出的&#xff1a; 说白了&#xff1a; 网络输出三个…

深圳国际新能源及智能网联汽车全产业博览会今年10月举办

7月25日&#xff0c;深圳市工业和信息化局与励展博览集团共同在深圳举办Automotive World China 2023深圳国际新能源及智能网联汽车全产业博览会&#xff08;简称“AWC 2023”&#xff09;全球推介启动大会&#xff0c;该博览会将于2023年10月11日-13日在深圳国际会展中心盛大举…

K8S初级入门系列之十-控制器(StatefulSet)

一、前言 在前面的系列K8S初级入门系列之六-控制器(RC/RS/Deployment)&#xff0c;K8S初级入门系列之七-控制器(Job/CronJob/Daemonset)我们已经介绍了多种控制器&#xff0c;今天我们将介绍最后一种控制器--StatefulSet&#xff0c;顾名思义&#xff0c;即有状态Set&#xff0…

我的第一个flutter项目(Android Webview)

前言&#xff1a;flutter开发环境搭建Flutter的开发环境搭建-图解_☆七年的博客-CSDN博客 第一个flutter简单项目&#xff0c;内容是一个主界面&#xff0c;其中&#xff1a; 1.内容点击数字自增 2.跳转一个空页&#xff0c; 3.跳转一个WebView界面 其中涉及添加主键&#xf…

选择合适明星代言:确保品牌传播与销售成功的关键一步

在当今激烈的市场竞争中&#xff0c;企业需要不断探索新的营销策略来吸引消费者的关注和忠诚度。其中一种被广泛采用的方法是邀请明星代言产品或品牌。判断想请的明星与自己的产品是否相合适是十分重要的步骤&#xff0c;这关系到代言活动的成功与否。以下是一些方法可以帮助你…

DuckDB全面挑战SQLite

概要 当我们想要在具有嵌入式数据库的本地环境中工作时&#xff0c;我们倾向于默认使用 SQLite。虽然大多数情况下这都很好&#xff0c;但这就像骑自行车去 100 公里之外&#xff1a;可能不是最好的选择。 这篇文章中将讨论以下要点&#xff1a; • DuckDB 简介&#xff1a;它…

企业邮箱默认发信账户用途说明及设置方法

有的时候&#xff0c;企业有多个子公司&#xff0c;或者对内和对外需要用不同的邮箱地址&#xff0c;或者发给不同的人需要用不同的邮箱地址&#xff0c;这个时候企业或用户一般会设置别名邮箱用来区分。 那么问题来了&#xff0c;这么多邮箱账号&#xff0c;我发信的时候默认…

大模型的淘金时代,HPE给出了一份智能经济“奇点”攻略

进入2023年&#xff0c;ChatGPT引发了一个新的AI时代——大模型时代。陆奇说&#xff1a;“我已经跟不上大模型时代的狂飙速度了&#xff01;”大模型引发了AI产业整体升级换代&#xff0c;各种大模型层出不穷&#xff0c;科技公司纷纷入局&#xff0c;AI创业公司再次雨后春笋般…

【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(持久化功能分析)

探究Redis服务启动的过程机制的技术原理和流程分析的指南&#xff08;持久化功能分析&#xff09; Redis提供的持久化机制Redis持久化如何工作Redis持久化的故障分析持久化频率操作分析数据库多久调用一次write&#xff0c;将数据写入内核缓冲区&#xff1f;内核多久将系统缓冲…

算法空间复杂度详解

如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 前言 避免在处理大规模问题时出现效率低下&#xff0c;耗费较多…

STM32 Flash学习(一)

STM32 FLASH简介 不同型号的STM32&#xff0c;其Flash容量也不同。 MiniSTM32开发板选择的STM32F103RCT6的FLASH容量为256K字节&#xff0c;属于大容量产品。 STM32的闪存模块由&#xff1a;主存储器、信息块和闪存存储器接口寄存器等3部分组成。 主存储器&#xff0c;该部分…

服务器被爬虫恶意攻击怎么办?

在有预算的情况可以采购第三方服务防火墙&#xff0c;没钱就使用开源的WAF进行防护。 # WAF防火墙的基本防护原理 WAF&#xff08;Web 应用防火墙&#xff09;可以使用多种技术来防止恶意爬虫攻击&#xff0c;例如&#xff1a; 1. 黑名单&#xff1a;WAF 可以使用黑名单技术来…

会点C++还需要再学Python吗?

提到的C、数据结构与算法、操作系统、计算机网络和数据库技术等确实是计算机科学中非常重要的基础知识领域&#xff0c;对于软件开发和计算机工程师来说&#xff0c;它们是必备的核心知识。掌握这些知识对于开发高性能、可靠和安全的应用程序非常重要。Python作为一种脚本语言&…