C++ 一些学习笔记(六)类和对象-封装
主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。
本文章的主要内容是关于封装的。
类和对象
C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物皆为对象,对象有其属性和行为
1.封装
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事务
在设计类的时候,属性和行为写在一起,表现事务
语法:class 类名{访问权限:属性/行为};
类中的属性和行为统称为 成员
属性 又称为成员属性或者成员变量
行为 又可以称为成员函数或者成员方法
设计一个圆类,求圆的周长
圆周长公式:2*PI*半径
const double PI=3.14;
//class代表设计一个类,类后边紧跟着的就是类名称
class Circle{
//访问权限
public://公共权限
//属性
int m_r;//半径
//行为
double calculateZC(){//获取圆的周长
return 2*PI*m_r;
}
};
int main(){
//通过圆类,创建具体的圆(对象)
Circle cl;
//给圆对象的属性进行赋值
c1.m_r=10;
cout<<"圆的周长为:"<<cl.calculeteZC()<<end;;
}
设计一个学生类,属性有姓名和学号
可以给姓名和学号赋值,可以显示学生的姓名和学号
class Student{
public:
//属性
string m_Name;//姓名
int m_Id;//学号
//行为
void showStudent(){//显示姓名和学号
cout<<"姓名"<<m_Name<<"学号"<<m_Id<<endl;
}
void setName(string neme){//给姓名赋值
m_Name=name;
}
void setId(int id){//给姓名赋值
m_Id=id;
}
};
int main(){
//实例化,创建一个具体的学生
Student s1;
s1.m_Name="张三";
s1.m_Id=1;
//显示学生信息
s1.showStudent();
Student s2;
s2.setName("李四");
s2.setId(1);
s2.showStudent();
}
- 将属性和行为加以权限控制
类在设计时,可以把属性和行为放在不同的权限下加以控制
访问权限有三类:
1.public 公共权限 类内可以访问 类外可以访问
2.protected 保护权限 类内可以访问 类外不可以访问
3.private 私有权限 类内可以访问 类外不可以访问
class Person{
public://
string m_Name;
protected:
string m_Car;
private:
int m_Password;
}
public:
void func(){
m_Name="张三";
m_Car="拖拉机";
m_Password=123456;
}
int main(){
Person p1;//实例化具体对象
p1.m_Name="李四";
p1.m_Car="拖拉机";//保护权限内容,类外访问不到
p1.m_Password=123;//私有权限内容,类外访问不到
}
2.struct和class的区别
在C++中struct和class唯一的区别就在于 默认的访问权限不同
区别:
- struct默认权限为公共
- class默认权限为私有
class C1{
int m_A;//默认权限私有
}
struct C2{
int m_A;//默认权限公共
}
int main(){
C1 c1;
C2 c2;
//c1.m_A=100;//私有不可访问
c2.m_A=100;
}
3.成员属性设置为私有
优点:
- 将所有成员属性设置为私有,可以自己控制读写权限
- 对于写权限,我们可以检测数据的有效性
成员属性设置为私有
class Person{
public:
void setName(string name){//写姓名
m_Name=name;
}
//读姓名
void getName(string name){//读姓名
return m_Name;
}
int getAge(){
//m_Age=0;//初始化为0岁
return m_Age;
}
void setAge(){
if(age<0||age>150){return;}
}//检测有效性
void setLover(string lover){
m_Lover=lover;
}
private:
string m_Name;//可读可写
int m_Age;//
string m_Lover;//只写
}
int main(){
Person p;
p.setName("张三");
cout<<"姓名为"<<p.getName()<<endl;
cout<<"年龄为"<<p.geAgme()<<endl;
p.setLover("xx");
}
在一个类中可以让另一个类作为本类的成员
22 类和对象-封装-设计案例2-点和圆关系中份文件编写