C++笔记(五)之核心编程(四)(一)封装

四.类和对象

1.封装

意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制

1.意义一:

  • 在设计类的时候,属性和行为写在一起,表现事物
  • 语法:class 类名(访问权限:属性 / 行为);
  • 说明

  • 属性:成员属性   成员变量
  • 行为:成员函数   成员方法

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

#include<iostream>
using namespace std;


//公式:C=π*半径*2
const double PI = 3.14;

//class 代表设计一个类,类后面紧跟着的是类的名称
class yuan
{
	//访问权限;公共权限
public:

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

int main()
{
	//通过圆类 来创建一个具体的圆(对象)
	yuan c;
	//给圆对象 的属性进行赋值
	c.m_r = 10;
	//C=2*PI*10=62,8;
	cout << "圆的周长为:" << c.calculateZC() << endl;
	system("pause");
	return 0;
}

    示例二:

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

#include<iostream>
using namespace std;


//公式:C=π*半径*2
const double PI = 3.14;

//class 代表设计一个类,类后面紧跟着的是类的名称
class student
{
public://公共权限
	//属性
	string name;//姓名
	int num;//学号
	//行为
	//显示学生信息
	void showstudent()
	{
		cout << "姓名:" << name <<endl<< "学号:" << num << endl;
	}
	//输入学生姓名
	void setname(string n)
	{
		name = n;
	}
	//输入学生学号
	void setnum(int m)
	{
		num = m;
	}

};

int main()
{
	student A;//创建一个学生
	A.name = "张三";//给姓名赋值
	A.num = 1;//给学号赋值
	A.showstudent();//显示学生信息

	student B;
	B.setname("李四");//给姓名赋值
	B.setnum(2);//给学号赋值
	B.showstudent();//显示学生信息
	system("pause");
	return 0;
}

 2.意义二

  • 类在设计时,可以把属性和行为放在不同的权限下,加以控制
  • 访问权限有三种
  1. public          公共权限     成员   类内可以访问  类外也可以访问
  2. protected     保护权限    成员   类内可以访问  类外不可以访问     子可以访问父中保护内容
  3. private         私有权限    成员   类内可以访问  类外不可以访问     子不可以访问父中私有内容    
#include<iostream>
using namespace std;

class person
{

public://公共权限
	string p_name;//名字
protected://保护权限
	string p_car;//汽车
private://私有权限
	int p_password;//银行卡密码
public:
	void fun()
	{
		p_name="张三";
		p_car = "拖拉机";
		p_password = 123456;

	}
protected:
	void fun1()
	{
		p_name = "陈无";
		p_car = "货车";
		p_password = 234567;

	}
};

int main()
{
	person A;
	A.p_name = "李四";
	//A.p_car = "奔驰";//保护权限在类外访问不到
	//A.p_password = 234567;//私有权限在类外也访问不到
	A.fun();
	//A.fun1();//保护权限的函数不可以访问
	system("pause");
	return 0;
}

二.struct和class的区别

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

区别:

  • struct默认权限为公共
  • class默认权限为私有
  • #include<iostream>
    using namespace std;
    
    class person
    {
    	string name;
    };
    
    struct student
    {
    	int num;
    };
    
    int main()
    {
    	person A;
    	student B;
    	//A.name = "张三";//报错,class默认为私有权限,类外不可以访问
    	B.num = 1;
    	system("pause");
    	return 0;
    }

三.成员属性设置为私有化 

本质就是创建一个借口,接通类外和类内的私有和保护权限

  • 优点一:将所有成员属性设置为私有,可以自己控制读写权限
  • 优点二:对于写权限,我们可以检测数据的有效性
#include<iostream>
using namespace std;
#include<string>

class person
{
public:    //接口:接通类外与类内的保护和隐私权限
	//写姓名
	void setname(string name)
	{
		m_name = name;
	}
	//读姓名
	string getname()
	{
		return m_name;
	}
	//读年龄
	int getnum()
	{
		m_num = 0;
		return m_num;
	}
	//读爱人
	string setlover(string lover)
	{
		m_lover = lover;
	}
private:
	string m_name;//姓名  可读可写
	int m_num;//年龄    只读
	string m_lover;//爱人  只写
};

int main()
{
	person A;
	A.setname("张三");//成功写入A的姓名
	cout << "A`s name:" << A.getname() << endl;//读取A的名字
	cout << "A`s  num:" << A.getnum() << endl;//读取A的年龄
	A.setlover("艾伦");//写入A的爱人
	system("pause");
	return 0;
}

案例:设计立方体类

  • 设计立方体类
  • 求出立方体的面积和体积
  • 分别用全局函数和成员函数判断两个立方体是否相等
#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  gets()
	{
		return 2*(m_l*m_w+m_l*m_h+m_w*m_h);
	}
	// 获取立方体体积
	 int  getv()
	{
		 return m_l * m_w * m_h;
	}
	
	//利用成员函数判断两个函数
	bool Issamebyclass(cube s_2)
	{
		if (m_l == s_2.getl() && m_w == s_2.getw() && m_h == s_2.geth())
		{
			return true;
		}
		return false;
	}
	//属性
private:
	int m_l;
	int m_w;
	int m_h;
};
//判断两个立方体是否相等  分别利用全局函数和成员函数
bool Issame(cube s_1,cube s_2)
{
	if (s_1.getl() == s_2.getl() && s_1.getw() == s_2.getw() && s_1.geth() == s_2.geth())
	{
		return true;
	}
	return false;
}
int main()
{
	cube s_1;
	s_1.seth(10);
	s_1.setl(10);
	s_1.setw(10);
	cout << "长方体的面积" << s_1.gets() << endl;
	cout << "长方体的体积" << s_1.getv() << endl;
	//创建第二个立方体
	cube s_2;
	s_2.seth(11);
	s_2.setl(8);
	s_2.setw(9);
	bool ret = Issame(s_1, s_2);//利用全局函数判断两个立方体是否相等
	if (ret)
	{
		cout << "全局函数判断:s_1和s_2相等" << endl;
	}
	cout << "全局函数判断s_1和s_2不相等" << endl;
	//成员函数判断立方体是否相等
	ret = s_1.Issamebyclass(s_2);
	if (ret)
	{
		cout << "成员函数判断:s_1和s_2相等" << endl;
	}
	cout << "成员函数判断s_1和s_2不相等" << endl;
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值