封 装 封装 封装
- 16.类和对象-封装-属性和行为作为整体
- 17.类和对象-封装-案例-设计学生类
- 18.类和对象-封装-访问权限
- 19.类和对象-封装-c++中class和struct的区别
- 20.类和对象-封装-成员属性私有化
- 21.类和对象-封装-设计案例1-立方体类
- 22.类和对象-封装-设计案例2-点和圆关系
16.类和对象-封装-属性和行为作为整体
C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装意义—:
在设计类的时候,属性和行为写在一起,表现事物
语法:class类名{访问权限:属性/行为};
#include <iostream>
using namespace std;
// 圆周率
const double PI = 3.14;
// 设计一个圆类,求圆的周长
class Circle
{
// 权限
public:
// 属性
int m_r;
// 行为
double calculate_circumference() {
return 2 * PI * m_r;
}
};
int main()
{
// 创建对象
Circle c1;
// 属性赋值
c1.m_r = 20;
// 调用行为
cout << c1.calculate_circumference() << endl;
return 0;
}
17.类和对象-封装-案例-设计学生类
#include <iostream>
using namespace std;
// 设计一个学生类,属性有姓名和学号,
// 可以给姓名和学号赋值,可以显示学生的姓名和学号
class Student
{
// 权限
public:
// 成员:
// 属性(成员属性/成员变量)
string stu_name;
int stu_id;
// 行为(成员函数/成员方法)
void show() {
cout << "name: " << stu_name << " id: " << stu_id << endl;
}
// 给属性赋值函数
void setName(string name) {
stu_name = name;
}
};
int main()
{
// 创建对象
Student s1;
// 属性赋值
s1.stu_id = 0001;
s1.stu_name = "major";
// 调用行为
s1.show();
// 创建对象
Student s2;
// 属性赋值
s2.stu_id = 0002;
s2.setName("major_s");
// 调用行为
s2.show();
return 0;
}
18.类和对象-封装-访问权限
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
1.public 公共权限
2.protected 保护权限
3. private 私有权限
#include <iostream>
using namespace std;
//类在设计时,可以把属性和行为放在不同的权限下,加以控制
//访问权限有三种 :
//1.public 公共权限 成员 类内可以访问 类外可以访问
//2.protected 保护权限 成员 类内可以访问 类外不可以访问 ,但继承者可以访问
//3. private 私有权限 成员 类内可以访问 类外不可以访问
class Person
{
// 公共权限
public:
string my_name;
// 保护权限
protected:
string my_car;
// 私有权限
private:
int my_password;
public:
// 类内可以访问
void func()
{
my_name = "major";
my_car = "spaceship";
my_password = 123456;
}
};
int main()
{
Person p1;
p1.my_name = "major_s";
p1.my_car = "test";
p1.my_password = 123;
return 0;
}
19.类和对象-封装-c++中class和struct的区别
在C++中struct和class唯—的区别就在于默认的访问权限不同
区别:
- struct 默认权限为公共
- class 默认权限为私有
#include <iostream>
using namespace std;
// struct和class区别
// struct默认权限是公共public
// class默认权限是私有private
class C1
{
int test; // 默认权限是私有private
};
struct S1
{
int test; // 默认权限是公共public
};
int main()
{
C1 c1;
c1.test;
S1 s1;
s1.test;
return 0;
}
20.类和对象-封装-成员属性私有化
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#include <iostream>
using namespace std;
// 成员属性设置为私有
//1、可以自己控制读写权限
//2、对于写可以检测数据的有效性
class Person
{
private:
string my_name; // 可读、可写
int my_age; // 只读
int my_id; //只写
public:
// 设置姓名
void setName(string name) {
my_name = name;
}
// 获取姓名
string getName() {
return my_name;
}
// 获取年龄 只读
int getAge()
{
my_age = 0;
return my_age;
}
// 设置id 只写
void setId(int id) {
my_id = id;
}
};
int main()
{
Person p;
p.setName("major_s");
cout << "name: " << p.getName() << endl;
p.getAge();
cout << "age: " << p.getAge() << endl;
p.setId(123);
return 0;
}
对于写权限,我们可以检测数据的有效性
#include <iostream>
using namespace std;
// 成员属性设置为私有
//1、可以自己控制读写权限
//2、对于写可以检测数据的有效性
class Person
{
private:
string my_name; // 可读、可写
int my_age; // 可读、限制写
int my_id; //只写
public:
// 设置姓名
void setName(string name) {
my_name = name;
}
// 获取姓名
string getName() {
return my_name;
}
// 获取年龄
int getAge()
{
return my_age;
}
void setAge(int age) {
if (age < 0 || age>150)
{
my_age = 0;
cout << "你确定吗?" << endl;
return;
}
my_age = age;
}
// 设置id 只写
void setId(int id) {
my_id = id;
}
};
int main()
{
Person p;
p.setName("major_s");
cout << "name: " << p.getName() << endl;
p.setAge(1000);
p.getAge();
cout << "age: " << p.getAge() << endl;
p.setId(123);
return 0;
}
21.类和对象-封装-设计案例1-立方体类
22.类和对象-封装-设计案例2-点和圆关系