C++核心编程——4 类和对象- 4.1 封装

类和对象

​ C++面向对象的三大特性为:封装、继承、多态

​ C++认为万事万物皆为对象,对象上有其属性和行为

例如:

​ 人可以作为对象,属性有姓名、年龄、身高…,行为有走、跑、跳…

​ 车可以作为对象,属性有轮胎、方向盘…,行为有载人、放音乐…

​ 具有相同性质的对象,我们可以抽象为,人属于人类,车属于车类

4.1 封装
4.1.1 封装的意义

​ 封装是C++面对对象的三大特性之一

​ 封装的意义:

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

封装意义一:

​ 在设计类的时候,属性和行为写在一起,表现事物

语法:class 类名{ 访问权限: 属性 / 行为 };

#include <iostream>
using namespace std;

const double pi = 3.14159;
//设计一个圆类,求圆的周长
class Circle
{
	//访问权限
	//公共权限
public:
	//属性
	double r;
	//行为
	//返回圆的周长
	double primeter()
	{
		return 2 * r * pi;
	}
	//返回圆的面积
	double area()
	{
		return r * r * pi;
	}
};

//主函数
int main()
{
	//通过圆类创建具体的圆(对象)
	//实例化:通过一个类创建一个对象的过程
	Circle c1;
	c1.r = 1;
	cout << "圆的周长为:" << c1.primeter() << endl;
	cout << "圆的面积为:" << c1.area() << endl;
	return 0;
}

封装意义二:

​ 类在设计时,可以把属性和行为放在不同权限下,加以控制

​ 访问权限有三种:

​ 1.public **公共权限:**类内可以访问 类外可以访问

​ 2.protected **保护权限:**类内可以访问 类外不可以访问 子类可以访问父类中的保护权限

​ 3.private **私有权限:**类内可以访问 类外不可以访问 子类不可以访问父类中的保护权限

class person
{
public:
	string p_name;
protected:
	string p_car;
private:
	int p_password;
public:
	void set(string name, string car, int password)
	{
		p_name = name;
		p_car = car;
		p_password = password;
	}
};

//主函数
int main()
{
	person p1;
	p1.set("张三", "拖拉机", 123);
	cout << p1.p_name << endl;
	//cout << p1.p_car << endl;//保护权限类外不可以访问
	//cout << p1.p_password << endl;//私有权限类外不可以访问
	return 0;
}
4.1.2 struct和class区别

​ 在C++中structclass唯一的区别就在于默认的访问权限不同

​ 区别:

  • struct默认权限为公有
  • class 默认权限为私有
class C1
{
	int a;//默认权限:私有
};

struct C2
{
	int b;//默认权限:公有
};
//主函数
int main()
{
	C1 c1;
	C2 c2;
	//c1.a = 10;//不可访问
	c2.b = 30;
	return 0;
}
4.1.3 成员属性设置为私有

​ **优点1:**将所有成员属性设置为私有,可以自己控制读写权限

​ **优点2:**对于写权限,我们可以检测数据的有效性

class person
{
private:
	string p_name;//设置为可读可写
	int p_age = 18;//设置为只读不写
	string p_lover;//设置为只写不读
public:
	//设置名字可写接口
	void setName(string name)
	{
		p_name = name;
	}
	//设置名字可读接口
	void showName()
	{
		cout << "姓名:" << p_name << endl;
	}
	//设置年龄只读接口
	void showAge()
	{
		cout << "年龄为:" << p_age << endl;
	}
	//设置爱人只写接口
	void setLover(string lover)
	{
		p_lover = lover;
	}
};

//主函数
int main()
{
	person p1;
	p1.setName("张三");
	p1.setLover("桃子女士");
	p1.showName();
	p1.showAge();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月江东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值