Sfoglia il codice sorgente

上传文件至 '封装2'

Creamo 2 anni fa
parent
commit
d4695040b9

+ 87 - 0
封装2/4、成员属性设置为私有.cpp

@@ -0,0 +1,87 @@
+//成员属性设置为私有
+
+//优点 1 :将所有成员属性设置为私有,可以自己控制读写权限
+//有点 2 :对于写权限,我们可以检测数据的有效性
+
+
+#include <iostream>
+
+
+//设计人类
+class Person
+{
+public:
+	
+	//设置姓名
+	void setName(std::string name)
+	{
+		m_Name = name;
+	}
+
+	//获取姓名
+	std::string getName()
+	{
+		return m_Name;
+	}
+
+	//获取年龄
+	//年龄可读可写  如果想修改 (年龄的范围必须是 0~150 之间)
+	int getAge()
+	{
+		//m_Age = 0;       //初始化为0岁
+		return m_Age;
+	}
+
+	//设置年龄
+	void setAge(int age)
+	{
+		if (age < 0 || age > 150)
+		{
+			m_Age = 0;
+			std::cout << "你这个老妖精!" << std::endl;
+			return;
+		}
+		m_Age = age;
+	}
+
+	//设置情人
+	void setLover(std::string lover)
+	{
+		m_Lover = lover;
+	}
+
+private:
+	//姓名   可读可写
+	std::string m_Name;
+
+
+	//年龄   只读
+	int m_Age;
+
+	//情人   只写
+	std::string m_Lover;
+
+};
+
+int main4()
+{
+	Person p;
+
+	p.setName("张三");
+	std::cout << "姓名为 :" << p.getName() << std::endl;
+
+	//p.m_Age = 18;
+	//p.setAge(18);
+	p.setAge(18);
+	std::cout << "年龄为 :" << p.getAge() << std::endl;
+
+	//设置情人为苍井
+	p.setLover("苍井");
+	//std::cout << "想知道p的情人是谁?" << p.m_Lover << std::endl;   //是不可以访问到的  只写权限
+
+
+
+	system("pause");
+
+	return 0;
+}

+ 132 - 0
封装2/5、封装案例练习:设计立方体类.cpp

@@ -0,0 +1,132 @@
+//练习案例1:设计立方体类
+
+//设计立方体类(Cube)
+//求出立方体的面积和体积
+//分别用全局函数和成员函数判断两个立方体是否相等。
+
+//1、创建立方体类
+//2、设计属性
+//3、设计行为 获取立方体面积和体积
+//4、分别利用全局函数和成员函数  判断两个立方体是否相等
+
+#include <iostream>
+
+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_H * m_W + 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 main5()
+{
+	//创建立方体对象
+	Cube c1;
+	c1.setL(10);
+	c1.setW(10);
+	c1.setH(10);
+
+	std::cout << "c1的面积为 : " << c1.calculateS() << std::endl;
+	std::cout << "c1的体积为 : " << c1.calculateV() << std::endl;
+
+
+	//创建第二个立方体
+	Cube c2;
+	c1.setL(10);
+	c1.setW(10);
+	c1.setH(10);
+
+	//利用全局函数判断
+	bool ret = isSame(c1, c2);
+	if (ret)
+	{
+		std::cout << "全局函数判断 : c1和c2是相等的" << std::endl;
+	}
+	else
+		std::cout << "全局函数判断 : c1和c2是不相等的" << std::endl;
+
+	//利用成员函数判断
+	ret = c1.isSameByClass(c2);
+	if (ret)
+	{
+		std::cout << "成员函数判断 : c1和c2是相等的" << std::endl;
+	}
+	else
+		std::cout << "成员函数判断 : c1和c2是不相等的" << std::endl;
+
+	system("pause");
+
+	return 0;
+}

+ 131 - 0
封装2/6、封装案例练习:点和圆的关系.cpp

@@ -0,0 +1,131 @@
+//案例练习2:点和圆的关系
+//设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系
+
+//点和圆的关系判断
+//点到圆心的距离 == 半径  点在圆上
+//点到愿心的距离 >  半径  点在圆外
+//点到圆心的距离 <  半径  点在圆内
+
+//点到圆心的距离???
+
+#include <iostream>
+#include "point.h"
+#include "circle.h"
+
+//设计一个点类
+//class Point
+//{
+//public:
+//	//设置x
+//	void setX(int x)
+//	{
+//		m_X = x;
+//	}
+//	//获取x
+//	int getX()
+//	{
+//		return m_X;
+//	}
+//	//设置y
+//	void setY(int y)
+//	{
+//		m_Y = 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)
+	{
+		std::cout << "点在圆上" << std::endl;
+	}
+	else if (distance > rDistance)
+	{
+		std::cout << "点在圆外" << std::endl;
+	}
+	else
+	{
+		std::cout << "点在圆内" << std::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(11);
+
+	//判断关系
+	isInCircle(c, p);
+
+
+	system("pause");
+
+	return 0;
+}