【C++学习】List4.1类和对象——封装-创新互联
- C++面向对象的三大特性为:封装、继承、多态
- C++认为万事万物都皆为对象,对象上有其属性和行为
1.封装的意义
封装时C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装的意义一:在设计类的时候,属性和行为写在一起,表现事物
语法:class 类名{ 访问权限: 属性 / 行为 }
示例1:设计一个圆类,求圆的的周长
#includeusing namespace std;
const double PI = 3.14;
//设计一个圆类,求圆的周长
//周长公式: 2 * PI * 半径
//class代表设计一个类,类后紧跟着的就是类名称
class Circle
{//访问权限
//公共权限
public:
//属性
int circle_r; //半径
//行为
//获取圆的周长
double caculateZC() {return 2 * PI * circle_r;
}
};
int main() {//通过圆类 创建具体的圆(对象)
Circle cl; //实例化:通过一个类创建一个对象
//给圆对象 的属性进行赋值
cl.circle_r = 10;
cout<< "圆的周长:"<< cl.caculateZC()<< endl;
return 0;
}
示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#includeusing namespace std;
const double PI = 3.14;
//
//设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
class Student
{//访问权限
public: //公共权限
//类中的属性和行为,我们统一称为成员
//属性 成员属性 成员变量
//行为 成员函数 成员方法
//属性
int number; //学号
string name; //姓名
//行为
//显示姓名和学号
void showStudent() {cout<< "姓名:"<< name<< endl;
cout<< "学号:"<< number<< endl;
}
//给姓名赋值
void setName(string st_name) {name = st_name;
}
//给姓名赋值
void setId(int id) {number = id;
}
};
int main() { //创建一个具体学生,,,实例化
Student st1;
//给st对象,进行属性赋值操作
st1.name = "小扬";
st1.number = 1001;
//显示学生信息
st1.showStudent();
Student st2;
st2.name = "小凡";
st2.number = 1002;
st2.showStudent();
Student st3;
st3.setName("小宇");
st3.setId(1003);
st3.showStudent();
return 0;
}
封装的意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限
- protected 保护权限
- private 私有权限
#includeusing namespace std;
//访问权限
//三种
//公共权限 public 成员 类内可以访问 类外可以访问
//保护权限protected 成员 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容
//私有权限private 成员 类内可以访问 类外不可以访问 儿子不可以访问父亲的私有内容
class Person
{public:
//公共权限
string m_name;
protected:
//保护权限
string m_car;
private:
//私有权限
int m_password;
public:
void func() {m_name = "小刘";
m_car = "奥迪";
m_password = 123;
}
};
int main() {//实例化具体对象
Person p1;
p1.m_name = "蛋蛋";
//p1.m_car = "保时捷"; //保护权限的内容,在类外访问不到
cout<< p1.m_name<< endl;
p1.func();
cout<< p1.m_name<< endl;
return 0;
}
2.struct和class 的区别
在C++中struct和class唯一的区别在于 默认的访问权限不同
区别:
- struct 默认权限是 公共
- class 默认权限是 私有
#includeusing namespace std;
//struct 和class 区别
//struct 默认权限是公共
//class 默认权限是私有
class C1 {int m_A = 0; //默认权限是 私有
};
struct C2 {int m_B = 1; //默认权限是 公共
};
int main() {C1 c1;
//cout<< c1.m_A<< endl; //私有权限,不可访问
C2 c2;
cout<< c2.m_B<< endl; //公共权限,可以访问
return 0;
}
3.成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#includeusing namespace std;
//成员属性设置为私有
//1.可以自己控制读写全写
//2.对于写可以检测数据的有效性
//设计人类
class Person
{private:
//姓名
string name;
//年龄
int age = 18;
//爱人
string lover;
public:
//设置姓名
void setName(string pname) {name = pname;
}
//获取姓名
string getName() {return name;
}
void setAge(int page) {if (page< 0 || page>150) { age = 0;
cout<< "年龄有误"<< endl;
return;
}
age = page;
}
//获取年龄
int getAge() {
return age;
}
//获取爱人
string getLover() {lover = "小扬";
return lover;
}
};
int main() {Person p;
p.setName("小蛋");
cout<< "姓名为:"<< p.getName()<< endl;
p.setAge(200);
cout<< "年龄为:"<< p.getAge()<< endl;
cout<< "爱人为:"<< p.getLover()<< endl;
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:【C++学习】List4.1类和对象——封装-创新互联
标题路径:http://myzitong.com/article/dghsep.html