封装(个人学习笔记黑马学习)

news2024/12/29 19:38:55

1、格式

#include <iostream>
using namespace std;

const double PI =3.14;


//设计一个圆类,求圆的周长
class Circle {
	//访问权限
	//公共权限
public:

	//属性
	//半径
	int m_r;
	//行为
	//获取圆的周长
	double calculateZC() {
		return 2 * PI * m_r;
	}
};

int main() {

	//通过圆类创造具体的圆
	Circle c1;
	c1.m_r = 10;
	cout << "圆的周长:" << c1.calculateZC() << endl;
	system("pause");
	return 0;
}


2、案例:设计学生类

设计一个学生类,属性有姓备和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

#include <iostream>
using namespace std;
#include <string>

class Studentt {
public:
	string m_Name;
	int m_Id;

	void showStudent() {
		cout << "姓名:" << m_Name << " 学号:" << m_Id << endl;
	}

	//给姓名赋值
	void setName(string name) {
		m_Name = name;
	}

	//给学号赋值
	void setId(int id) {
		m_Id = id;
	}
};

int main() {

	Studentt s1;
	//s1.m_Name = "张三";
	s1.setName("张三");
	s1.setId(1);
	s1.showStudent();

	Studentt s2;
	s2.m_Name = "李四";
	s2.m_Id = 2;
	s2.showStudent();
	
	system("pause");
	return 0;
}


3、权限访问

1. public公共权限

2. protected 保护权限

3. private私有权限

#include <iostream>
using namespace std;
#include <string>

//1. public公共权限     成员 类内可以访问 类外也可以访问
//2. protected保护权限  成员 类内可以访问 类外不可以访问   儿子可以访问父亲中的保护内容
//3. private私有权限    成员 类内可以访问 类外不可以访问   儿子不可以访问父亲中保护的内容


class Person {
	//公共权限
public:
	string m_Name;

	//保护权限
protected:
	string m_Car;

	//私有权限
private:
	int m_Password;

public:
	void func() {
		m_Name = "张三";
		m_Car = "拖拉机";
		m_Password = 123456;
	}

};

int main() {

	Person p1;

	p1.m_Name = "李四";
	//p1.m_Car = "奔驰";//保护权限内容 在类外访问不到
	//p1.m_Password = 23456;//私有权限内容,在类外访问不到

	system("pause");
	return 0;
}

4、class和struct区别

  • struct 默认权限为公共
  • class默认权限为私有
#include <iostream>
using namespace std;
#include <string>

class C1 {
	int m_A;//默认权限是私有
};

struct C2 {
	int m_A;//默认权限是公共
};

int main() {

	C1 c1;
	//c1.m_A = 100;

	C2 c2;
	c2.m_A = 100;

	system("pause");
	return 0;
}

5、成员属性私有化

#include <iostream>
using namespace std;
#include <string>

class Person {

	
public:

    //设置姓名
	void setName(string name) {
		m_Name = name;
	}


	//获取姓名
	string getName() {
		return m_Name;
	}

	int getAge() {
		m_Age = 10;
		return m_Age;
	}

	void setLover(string lover) {
		m_Lover = lover;
	}

private:
	string m_Name;//可读可写
	int m_Age;//只读
	string m_Lover;//只写
};

int main() {

	Person p;
	p.setName("张三");
	cout << "姓名:"<<p.getName()<< endl;
	cout << "年龄:" << p.getAge() << endl;
	p.setName("梨花");

	system("pause");
	return 0;
}


6、案例设计:立方体类

设计立方体类(Cube)
求出立方体的面积和体积
分别用全局函数和成员函数判断两个立方体是否相等

#include <iostream>
using namespace std;
#include <string>

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 + 2 * m_W * m_H + 2 * m_L * m_H;
	}

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

	//利用成员函数判断两个立方体是否相等
	bool isSameByClass(Cube& c) {
		if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH()) {
		return true;
	}
	return false;
}

private:

	int m_L;
	int m_W;
	int 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的面积为:" << c1.calculateS() << endl;
	cout << "c1的体积为:" << c1.calculateV() << endl;


	Cube c2;
	c2.setL(10);
	c2.setW(10);
	c2.setH(10);
	cout << "c2的面积为:" << c2.calculateS() << endl;
	cout << "c2的体积为:" << c2.calculateV() << endl;


	bool ret=isSame(c1, c2);
	if (ret) {
		cout << "c1,c2相等" << endl;
	}
	else {
		cout << "c1,c2不相等" << endl;
	}

	int ret2= c1.isSameByClass(c2);
	if (ret2) {
		cout << "c1,c2相等" << endl;
	}
	else {
		cout << "c1,c2不相等" << endl;
	}


	int ret3 = c2.isSameByClass(c1);
	if (ret3) {
		cout << "c1,c2相等" << endl;
	}
	else {
		cout << "c1,c2不相等" << endl;
	}

	system("pause");
	return 0;
}


7、案例设计:点和圆的关系

设计一个圆形类(Circle),和一个点类 (Point) ,计算点和圆的关系

#include <iostream>
using namespace std;
#include <string>

class Point {
public:
	void setX(int x) {
		m_X = x;
	}
	int getX() {
		return m_X;
	}

	void setY(int y) {
		m_Y = y;
	}
	int getY() {
		return m_Y;
	}

private:
	int m_X;
	int m_Y;
};

class Circle {

public:
	void setR(int r) {
		m_R = r;
	}
	int getR() {
		return m_R;
	}

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

private:
	int m_R;

	Point m_Center;//圆心
};

void isInCircle(Circle& c, Point& p) {
	//计算两点之间距离 平方
	int distance =
		(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
		(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
	//计算半径的平方
	int rDistance = c.getR() * c.getR();
	//判断关系
	if (distance == rDistance) {
		cout << "点在圆上" << endl;
	}
	else if (distance > rDistance) {
		cout << "点在圆外" << endl;
	}
	else {
		cout << "点在圆内" << endl;
	}
}

 int main(){
	//创建圆
	Circle c;
	c.setR(10);
	Point center;
	center.setX(10);
	center.setY(10);
	c.setCenter(center);
	//创建点
	Point p;
	p.setX(10);
	p.setY(11);
	//判断关系
	isInCircle(c, p);


	system("pause");
	return 0;
}


point.h

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


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

	void setY(int y);
	int getY();
private:
	int m_X;
	int m_Y;
};

point.cpp

#include "point.h"



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

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

circle.h

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

class Circle {

public:
	void setR(int r);
	int getR();

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

private:
	int m_R;

	Point m_Center;//圆心
};

circle.cpp

#include "circle.h"




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

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

面向对象.cpp

#include <iostream>
using namespace std;
#include <string>
#include "point.h"
#include "circle.h"

//class Point {
//public:
//	void setX(int x) {
//		m_X = x;
//	}
//	int getX() {
//		return m_X;
//	}
//
//	void setY(int y) {
//		m_Y = y;
//	}
//	int getY() {
//		return m_Y;
//	}
//
//private:
//	int m_X;
//	int m_Y;
//};

//class Circle {
//
//public:
//	void setR(int r) {
//		m_R = r;
//	}
//	int getR() {
//		return m_R;
//	}
//
//	void setCenter(Point center) {
//		m_Center = center;
//	}
//	Point getCenter() {
//		return m_Center;
//	}
//
//private:
//	int m_R;
//
//	Point m_Center;//圆心
//};

void isInCircle(Circle& c, Point& p) {
	//计算两点之间距离 平方
	int distance =
		(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
		(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
	//计算半径的平方
	int rDistance = c.getR() * c.getR();
	//判断关系
	if (distance == rDistance) {
		cout << "点在圆上" << endl;
	}
	else if (distance > rDistance) {
		cout << "点在圆外" << endl;
	}else {
		cout << "点在圆内" << endl;
	}
}

 int main(){
	//创建圆
	Circle c;
	c.setR(10);
	Point center;
	center.setX(10);
	center.setY(0);
	c.setCenter(center);
	//创建点
	Point p;
	p.setX(10);
	p.setY(10);
	//判断关系
	isInCircle(c, p);


	system("pause");
	return 0;
}

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

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

相关文章

MBA/MEM联考已经过了“蛮干”的时间段了……

如果MBA/MEM备考存在有效的方式&#xff0c;倾注时间一定是最靠谱的&#xff01;如果要靠谱的一点的方式&#xff0c;那就是大量的倾注时间&#xff01;可问题目前已经没有“大量”的时间可以用了&#xff0c;因为对于在职考生而言&#xff0c;最难得得也恰恰就是时间&#xff…

软件总体部署:Total Software Deployment Crack

TNI 6.1&#xff1a;数据传输模式的新界面和功能 根据您向支持团队提供的反馈&#xff0c;我们对“数据传输”窗口的机制和界面进行了重大重新设计。 概述 远程和自动化软件部署 全面软件部署&#xff1a;企业网络的托管软件部署。 远程和自动化软件部署 Total Software Deplo…

碳中和数据合集(含上市公司碳排放、碳减排、排污费、环境税等数据)1990-2022年

数据简介&#xff1a;“推动企业形成绿色生产方式和生活方式”“支持有条件的地方和重点行业、重点企业率先达到碳排放峰值”。可见&#xff0c;企业已成为应对气候变化、推动低碳转型、助力“双碳”目标实现的主力军&#xff0c;推动其绿色、低碳化转型已成为未来经济发展的必…

OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse() 4.绘制矩形rectangle() 5.绘制多边形 fillPoly() 6.绘制文字putText() 7.例子 1.绘制直线line() CV_EXPORTS_W void line(InputOutputArray img,Point pt1, Point pt2,const Scalar& color,int t…

“宽带中国”城市试点与专利匹配数据,做一个多期DID(2010-2021)

数据简介&#xff1a;人类正在经历以互联网为基础的第三次技术革命&#xff0c;作为以“互联网”为底层基础的数字经济&#xff0c;以5G、人工智能和大数据中心为代表的数字基础设施建设和普惠宽带网络基础设施建设成为数字经济可持续发展的动力。工业和信息化部、国家发展和改…

uniapp小程序单页面改变手机电量,头部通知的颜色效果demo(整理)

onShow(){ // 改变电池的颜色 wx.setNavigationBarColor({ frontColor: ‘#ffffff’, //只支持两种颜色 backgroundColor: ‘#ffffff’, animation: { duration: 1 } }) }

个微API接口开发

请求URL&#xff1a; http://域名地址/sendText 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是string登录实例标识wcId是string接收…

常见链表的操作题+代码

文章目录 leetcode 2 两数相加leetcode 19删除链表中的倒数第N个节点leetcode 21合并两个有序链表leetcode 24两两交换链表中的节点leetcode 25k个一组链表反转leetcode 61旋转链表 leetcode 2 两数相加 两个链表对应的值进行相加&#xff0c;如何计算呢&#xff1f; 考虑点&…

2.3 数据模型

思维导图&#xff1a; 前言&#xff1a; 我的理解&#xff1a; 这段话介绍了概念模型和数据模型之间的关系&#xff0c;以及数据模型的定义和重要性。具体解读如下&#xff1a; 1. **概念模型**&#xff1a;它是一种描述现实世界数据关系的抽象模型&#xff0c;不依赖于任何…

unity 场景烘培(边学习,边记录)

前言&#xff1a;好记性不如烂笔头&#xff0c;本文只提供参考&#xff01; 问题总结&#xff1a;1.unity 场景烘焙问题之模型UV有重叠_野区捕龙为宠的博客-CSDN博客 一、光源种类&#xff08;摘录&#xff1a;Unity灯光&#xff08;light&#xff09;_浮影℡的博客-CSDN博客…

Win10搭建VisualSvn Server

Win10搭建VisualSvn Server 目录 Win10搭建VisualSvn Server一、下载VisualSvn Server安装包二、安装VisualSvn Server三、配置和使用VisualSVN Server四、添加用户及权限设定方法五、创建目录及配置权限 1、服务端&#xff1a;有集成了Subversion和Apache、安装使用非常简单且…

软件第三方验收测评介绍

软件第三方验收测试 软件项目验收测试介绍&#xff1a; 软件项目验收测试是部署软件之前的最后一个测试操作&#xff0c;是对系统进行全面的测试&#xff0c;以验证其是否符合合同要求&#xff0c;出具第三方测试报告&#xff0c;为系统验收提供依据。 验收测试的目的是&…

【Ambari】Python调用Rest API 获取集群状态信息并发送钉钉告警

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

RFA01无线麦克风无线音频模块

1、简介 RFA01无线麦克风模块&#xff0c; 是一款支持2.4G私有协议无线麦克风、无线音频模块&#xff0c;支持秒连、低延时、低功耗、高音质的特性。支持串口AT指令&#xff0c;支持外挂PA射频放大器。主从之间可实现数据的传输功能。 2、模块实物图片 3、模块功能说明 4、模块…

python 深度学习 解决遇到的报错问题3

目录 一、AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0. 二、ImportError: cannot import name logsumexp 三、FutureWarning: Passing (type, 1) or 1type as a synonym of type is deprecated; in a future version of numpy, it w…

【Interaction交互模块】ActionPublisher/ActionReciever

文章目录 需求案例原理0、相应准备1、发布器、接收器2、将把两者联系起来3、前提状态 补充 需求 Interactor只能将一个动作&#xff08;如按下手柄抓取键&#xff09;&#xff0c;传递给Interactble,如果要传两个或多个&#xff0c;就需要用发布器和接收器。 案例 右手柄抓取…

常见网络通信协议(http、https、ws)及安全协议(SSL、TLS、XTLS)

文章内容删除了一大半不合适的内容&#xff0c;发不出来&#xff0c;你懂得。&#x1f970; 一、常见网络通信协议1.1、HTTP 协议1.11 HTTP 协议简介1.12 HTTP 协议的工作流程1.13 HTTP 协议的常用方法1.14 HTTP 协议的常见状态码1.15 HTTP 的缺点 1.2 HTTPS 协议1.21 HTTPS 协…

生态系统模型Biome-BGC、InVEST模型、PLUS模型、SolVES模型、CENTURY模型、CASA模型、生态系统NPP等应用

目录 一、Biome-BGC介绍 二、Linux应用、CDO工具应用、Python应用 三、数据处理实践 四、单点的模拟 五、区域模拟-1 六、区域模拟-2 七、长时间序列模拟案例实践 更多应用 在Biome-BGC模型中&#xff0c;对于碳的生物量积累&#xff0c;采用光合酶促反应机理模型计算…

IDEA2023隐藏.idea和.iml文件

IDEA2023隐藏.idea和.iml文件 1. 打开file -> setting,快捷键CtrlAlts2. Editor -> File types3. 点击右侧Ignore files and folders一栏4. 添加需要忽略的文件5. 最重要一步 IDEA新建项目会自动生成一个.idea文件夹和.iml文件&#xff0c;开发中不需要对这两个文件修改&…

更改系统所有错误的注册表路径

应用场景 系统文件夹由中文变更为英文后&#xff0c;部分软件在更新时出现找不到对应路径错误 原路径&#xff1a; C:\Users\一颗橘子 改后路径&#xff1a; C:\Users\Orange 问题分析 修改系统文件夹后&#xff0c;对应没有修改软件的注册表信息&#xff0c;仍存在 C:\Users\一…