0
点赞
收藏
分享

微信扫一扫

C++学习笔记——类与对象-封装

阿尚青子自由写作人 2022-04-19 阅读 38
c++

封装

封装是C++面向对象三大特性之一
封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制
    封装意义一:
    在设计类的时候,属性和行为写在一起,表现事物
    语法:class 类名{访问权限 : 属性 / 行为};

设计一:设计一个圆类,求圆的周长

#include <iostream>
using namespace std;

#define PI 3.14

//设计一个圆类,求圆的周长  L = 2 * PI * r
//class 代表设计一个圆类,类后面紧跟着就是类的名称
class Circle
{
	//访问权限
	//公共权限
public:
	//属性
	//半径
	int m_R;  //半径



	//行为
	//获取圆的周长
	double get_circumference()
	{
		return 2 * PI * m_R;
	}
};

int main()
{
	//通过圆类,创建对象
	Circle c1;

	//给圆对象的属性进行赋值
	c1.m_R = 10;

	cout << "圆的周长为 : "  << c1.get_circumference() << endl;

	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

设计二:设计一个学生,具有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

#include <iostream>
using namespace std;

//设计学生类
class Student
{
public:   //公共权限
	//属性
	string m_Name;   //姓名
	int m_ID;        // 学号

	//行为
	//显示姓名和学号
	void showStudent()
	{
		cout << "姓名为: " << m_Name << " 学号为:" << m_ID << endl;
	}

};


int main()
{
	Student stu1;
	stu1.m_Name = "张三";
	stu1.m_ID = 1;
	stu1.showStudent();

	Student stu2;
	stu2.m_Name = "李四";
	stu2.m_ID = 2;
	stu2.showStudent();


	system("pause");
	return 0;
}

在这里插入图片描述

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

//设计学生类
class Student
{
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()
{
	Student stu1;
	stu1.setName("张三");
	stu1.setID(1);
	stu1.showStudent();

	//Student stu2;
	//stu2.m_Name = "李四";
	//stu2.m_ID = 2;
	//stu2.showStudent();


	system("pause");
	return 0;
}

运行结果:在这里插入图片描述

封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:

  1. public : 公共权限
  2. protected : 保护权限
  3. private : 私有权限

在这里插入图片描述

class Person
{
public:			//公共权限

	string m_Name;   //姓名

protected:		//保护权限 
	string m_Car;  //汽车

private:		//私有权限
	int m_Password;  //银行卡密码
private:
	void func()    //类内可以访问
	{
		m_Name = "张三";
		m_Car = "拖拉机";
		m_Password = 12389;
	}

};

在这里插入图片描述

struct 和 class 区别
在C++中struct 和 class 唯一的区别就在于默认的访问权限不同

区别:
struct默认权限为公共
class默认权限为私有
在这里插入图片描述
在这里插入图片描述
struct 没有报错

成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
在这里插入图片描述

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

//设计人类
class Person
{
public:
	//设置姓名:
	void setName(string name)
	{
		m_Name = name;
	}

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

	void setAge(int age)
	{
		if (age < 0 || age > 150)
			return;

		m_Age = age;
	}
	//获取年龄
	int GetAge()
	{
		//m_Age = 18;
		return m_Age;
	}
	
	//设置情人
	void setLover(string lover)
	{
		m_Lover = lover;
	}

private:
	//姓名  可读可写
	string m_Name;
	//年龄   只读
	int m_Age;
	//情人   只写
	string m_Lover;

};


int main()
{
	Person p1;
	p1.setName("张三");
	cout << "姓名为: " << p1.getName() << endl;
	
	p1.setLover("李四");
	
	p1.setAge(18);
	cout << " 年龄为 " << p1.GetAge() << endl;
//	cout << "情人是" << p1.m_Lover <<endl;  //只写权限

	system("pause");
	return 0;
}

在这里插入图片描述

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

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

//创建立方体的类
class Cube
{
public:
	void setLength(int length)  //设置长
	{
		m_L = length;
	}
	int getLength()  //获取长
	{
		return m_L;
	}

	void setWidth(int width)   //设置宽
	{
		m_W = width;
	}
	int getWidth()   //获取宽
	{
		return m_W;
	}

	void setHeight(int height)   //设置高
	{
		m_H = height;
	} 
	int getHeight()   //获取高
	{
		return m_H;
	}

	int calc_area()  //获取面积
	{
		return 2 * (m_L * m_W + m_L * m_H + m_L * m_H);
	}

	int calc_volume()  //获取体积
	{
		return m_L * m_W * m_H;
	}

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

private:
	int m_L;  //长
	int m_W;  //宽
	int m_H;  //高
};

//利用全局函数来判断两个立方体是否相等的
bool isSame(Cube &c1 ,Cube &c2)
{
	if (c1.getLength() == c2.getLength() && c1.getWidth() == c2.getWidth() && c1.getHeight() == c2.getHeight())
	{
		return true;
	}
	return false;
}


int main()
{
	Cube c1;
	c1.setLength(10);
	c1.setWidth(10);
	c1.setHeight(10);

	cout << "c1的面积为 : " << c1.calc_area() << endl;
	cout << "c1的体积为 : " << c1.calc_volume() << endl;

	Cube c2;
	c2.setLength(10);
	c2.setWidth(10);
	c2.setHeight(10);

	if (isSame(c1, c2))
		cout << "c1 和 c2 是相等的" << endl;
	else
		cout << "c1 和 c2 是不相等的" << endl;

	bool ret;
	
	ret = c1.isSameByClass(c2);
	if (ret)
		cout << "c1 和 c2 是相等的" << endl;
	else
		cout << "c1 和 c2 是不相等的" << endl;



	system("pause");
	return 0;
}

在这里插入图片描述

举报

相关推荐

0 条评论