c++ 面对对象的三大特性:封装、继承、多态
对象上有其属性和行为
具有相同性质的对象,可以抽象为类
一、封装
1、封装的意义
(1)将属性和行为作为一个整体,表现生活中的事物:
在设计类时,属性和行为写在一起,表现事物
语法:class 类名{权限访问:属性 / 行为};
例1 创建一个圆类
#include <iostream>
using namespace std;
//圆周率
const double PI = 3.14;
//设计一个圆类,求圆的周长
//周长公式 2 * PI * 半径
//class代表设计一个类,类后面紧跟着就是类的名称
class Circle
{
//访问权限
//公共权限
public:
//属性
int m_r;
//行为,通常是函数
//获取圆的周长
double calculateZC()
{
return 2 * PI * m_r;
}
};
int main()
{
//通过圆类 创建具体的圆(对象)
//通过一个;类,创建一个对象
Circle c1;
//给对象的属性进行赋值
c1.m_r = 10;
//2 * PI * 10
cout<<"圆的周长:"<<c1.calculateZC()<<endl;
return 0;
}
//学生类
//设计一个学生类,属性有姓名和学号
//可以给姓名和学号赋值,可以显示学生的姓名和学号
#include <iostream>
#include <string>
using namespace std;
//设计学生类
class Student
{
public://公共权限
//类中的属性和行为,统一称为 成员
//属性 成员属性 成员变量
//行为 成员函数 成员方法
//属性
string m_Name;//姓名
int m_Id;//学号
//行为
//显示姓名和学号
void showstudent()
{
cout<<"姓名:"<<m_Name<<" 学号:"<<m_Id<<endl;
}
//可以通过行为给姓名赋值
void setName(string name)
{
m_Name = name;
}
//通过学号进行赋值
void setId(int id)
{
m_Id = id;
}
};
int main()
{
//创建一个具体的学生
Student s1;
//给s1对象进行属性赋值
s1.m_Name = "蒋十三";
s1.m_Id = 1;
//显示学生信息
s1.showstudent();
Student s2;
s2.m_Name = "王五";
s2.m_Id = 2;
s2.showstudent();
//另一种赋值方法
Student s3;
s3.setName("公鸡大鱼怪");
s3.setId(3);
s3.showstudent();
return 0;
}
示例
(2)将属性和行为加以权限控制
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
1、public 公共权限
2、protected 保护权限
3、private 私有权限
#include <iostream>
#include <string>
using namespace std;
//访问权限
//公共权限 public 成员类内可以访问,类外可以访问
//保护权限 protceted 成员类内可以访问,类外不可以访问
//私有权限 private 成员 类内可以访问,类外不可以访问
//其中private 和 protected 在继承时会有不同
class person
{
public:
//公共权限
string m_Name;//姓名
protected:
//保护权限
string m_Car;//汽车
private:
//私有权限
int m_Password;//银行卡密码
public:
void func()
{
m_Name = "王五";
m_Car = "拖拉机";
m_Password = 35157210;
}
};
/*上述的各种类型在类内均可以访问*/
int main()
{
//创建具体对象
person p1;
p1.m_Name = "李四";//此时在类外可以访问
//p1.m_Car = "宝马"; 此时会报错,类外不可访问
//说明,保护权限内容,在类外访问不到
/* p1.m_Password = 123;会报错,私有权限内容,在类外时访问不到的
成员函数同理*/
return 0;
}
3、struct 和 class 区别
两者区别在于默认访问权限不同 struct 默认权限为公共,class 默认权限为私有