黑马程序员c++ 封装

封装的意义:

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

在c++中,通常将封装出来的整体叫做 类

例如我们可以设计一个圆类,这个类可以求出圆的周长

#include <iostream>
using namespace std;

const double PI = 3.14;

class Circle	//圆类定义 
{
public:			//公共权限 
	int c_r;	//类的属性 
	double culcir()		//类的行为 
	{
		return 2 * PI * c_r;
	}
};

int main()
{
	Circle c1;	//圆的一个对象声明 
	cout << "圆的半径为"; 
	cin >> c1.c_r;
	cout << "圆的周长为" << c1.culcir() << endl;
	return 0;
}

上面的代码中,class代表着一个类,后面紧跟着的是类的名称。

在类中主要包含 访问权限,属性,行为

其中权限在以后会讲解,属性主要包含类中的的变量行为就是实现功能的函数

通过类来创建一个具体对象的过程叫做实例化

对象的中的变量和函数可以通过 "."来访问

访问权限

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

访问权限分为三种:

  1. public        公共权限 其成员类内可以访问 类外也可以访问
  2. protected   保护权限 其成员类内可以访问 类外不可以访问
  3. private       私有权限 其成员类内可以访问 类外不可以访问

        保护权限和私有权限的区别主要体现在类的继承上,子类可以访问父类保护权限中的成员,却无法访问父类中私有权限的成员。

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

class Person
{
public:
	string name;
	
protected:
	string car;
	
private:
	string passcard;
	
public:
	void SetPerson()
	{
		name = "张三";
		car = "拖拉机";
		passcard = "123456"; 
	}
	
	void ShowName()
	{
		cout << name << endl;
	}
	
private:
	void ShowCar()
	{
		cout << name << endl;
	}
	
private:
	void ShowPassCard()
	{
		cout << passcard << endl;
	}
}; 

int main()
{
	Person per;
	
	per.SetPerson();
	
	per.ShowName();
//	per.ShowCar();        保护权限中的成员类外不可以访问
//	per.ShowPassCard();    私有权限中的成员类外不可以访问
	
	per.name = "李四";
	
	per.ShowName();
//	per.ShowCar();
//	per.ShowPassCard();
	
	return 0;
}

struct和class区别

结构体struct和类class的唯一区别就在于二者的默认访问权限不同

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

class C		//class 中属性的默认作用域为  private  类外不能访问 
{
	int a;
};

struct S
{
	int a;	//struct  中元素默认作用域为  public  类外可以访问 
};

int main()
{
	C c;
	S s;
	
//	c.a = 1; 
	s.a = 1;
	
	return 0;
}

成员属性设置为私有

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

using namespace std;

class Person
{
private:
	string p_name;	//控制姓名属性为可读可写 
	int p_age = 18;	//控制年龄属性为只读 
	string p_idol;	//控制偶像属性为只写 
	
public:	//通过对私有属性进行公有行为的操作实现控制属性的读写 
	void SetName(string name)
	{
		p_name = name;
	}
	
	string GetName()
	{
		return p_name;
	}
	
//	void SetAge(int age)    //将年龄属性设置为可写
//	{
//		if(age >= 0 && age <= 150)	//对输入属性的值进行检查 
//			p_age = age;
//	}
	
	int GetAge() //一个函数设置属性为只可读 
	{
		return p_age;
	}
	
	void SetIdol(string idol)    //一个函数设置属性为只可写 
	{
		p_idol = idol;
	}
	
};

int main()
{
	Person per;
	
	per.SetName("张三");
//	per.SetAge(20); 
	
	cout << "姓名" << per.GetName() << endl; 
	cout << "年龄" << per.GetAge() << endl;
	
	per.SetIdol("蔡徐坤");
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值