封装是c++面向对象的三大特性之一
将事物的属性行为进行集合,并且可以随时进行权限管理
语法class 类名{使用权限:属性/行为};
- 封装的意义:设计时将事物的属性行为放置一块
- 使用权限
- public:公开属性,类外类内均可访问,理解为家的大门?所有人都可以接触
- protected:保护属性,类外如果不是友元以外均不可以访问
- private:私有属性,除了友元可以访问,其余类外不可以,连继承的对象也不可以,理解为个人的隐私?
- 属性
- 事物的特性,比如人的名字、年龄、家庭住址,或者一个物体的长宽高等等
- 行为
- 对于属性的一些处理或者其他的函数形式,比如数值的加法运算、输出特定的语言内容
- 使用权限
使用类来完成一个圆的周长、面积的运算
定义这个圆的相关属性
class Circle{
public:
//完成用户的数值的输入
void setR(string r){
m_R=r;
}
double getLength(){
//m_R的数值已经被设置为用户输入的数值r
return 2*3.14*m_R;
}
//属性
public:
int m_R;
}
当调用函数时,应为
void test(){
Circle c;//创建对象c
c.setR(10);//让c的圆周长为10
cout<<c.getLength<<endl;//输出周长计算数值
}
- 封装的意义:便于对对象的属性的管理
- public 公共权限 类内可以访问 类外可以访问
- protected 保护权限 类内可以访问 类外不可以访问
- private 私有权限 类内可以访问 类外不可以访问
下面通过代码来简单理解一下这些权限
#include <bits/stdc++.h>
using namespace std;
class Person{
//Person的属性
public:
string name;
protected:
string phonenum;
private:
string address;
public:
//设置属性数值
void func(){
name="小明";
phonenum="123456";
address="幸福坝";
}
};
//测试权限
void test(){
Person p;
cout<<p.name<<endl;//输出p的名字
// cout<<p.address<<endl; protected属性类外不是友元访问不到
// cout<<p.phonenum<endl; private也同理,此时不注释掉编译器会报错
}
- class与struct的区别
在学习c语言的时候我们接触到结构体,也是类似的,将一个事物的多个属性集中一块,用一个struct进行代表,然后使用子属性进行操作,这样大大提高了逻辑性以及减少了代码的臃肿性质.
但是struct的权限默认全部为public属性,里面的属性全部可以访问到
相比之下使用class可以不仅存储一个事务的多种属性,以及同时对于事务属性的操作权限进行控制,比如设置类对象的隐私信息等等
- struct默认属性全为public权限
- class默认属性全为private权限
- 成员属性的权限设置
这里我用private权限进行一个举例子
#include <bits/stdc++.h>
using namespace std;
class Person{
public:
//姓名设置成可读可写
//输入名字
void setName(string name){
m_Name=name;
}
//读出名字
void getName(){
cout<<"姓名为"<<m_Name<<endl;
}
//年龄设置只写不读
void setAge(int age){
m_Age=age;
}
//此时如果去掉注释,编译器会报错,说m_Age未在此处声明,因为m_Age为private变,所以不能进行返回,只能设置不能读出
/*
int getAge(){
return m_Age;
}
*/
public:
string m_Name;
private:
in m_Age;
};
void test(){
Person p;
p.setName("陶笛");//设置名字为陶笛
p.getName();//输出名字
p.setAge(20);//设置年龄为20岁
}