前言:
C++面向对象的三大特性:封装、继承、多态
封装性:数据和代码捆绑在一起,避免外界干扰和不确定性访问。封装可以使得代码模块化。
继承性:让某种类型对象获得另一个类型对象的属性和方法。继承可以扩展已存在的代码
多态性:同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为(重载实现编译时多态,虚函数实现运行时多态)。多态的目的则是为了接口重用
那么我们今天着重讲述三大特性之一:封装!!!
封装的语法:
class 类名
{
访问权限 : 属性 / 行为
};
封装的意义:
1.将属性和行为作为一个整体,表现生活中的事物
2.将属性和行为加以权限控制
意义1:
将属性和行为作为一个整体,表现生活中的事物
如果我们要描述一个圆,请看下例:
#include <iostream>
using namespace std;
//设计一个圆类,求圆的周长
//圆求周长的公式:2 * PI * 半径
const double PI = 3.14;
//class代表设计一个类,类后面紧跟着的就是类名称
class Circle
{
//访问权限
//公共权限
public:
//属性
int m_r;//半径
//行为
double calculate_C()
{
return 2 * PI * m_r;
}//获取圆的周长
};
int main()
{
//通过圆类 创建具体的圆(对象)
Circle c1;
//给圆对象的属性进行赋值
c1.m_r = 10;
cout << "圆的周长为:." << c1.calculate_C() << endl;
system("pause");
return 0;
}
意义2:
将属性和行为加以权限控制
访问权限有三种;
public 公共权限 成员 类内可以访问,类外也可以访问
protected 保护权限 成员 类内可以访问,类外不可以访问
private 私有权限 成员 类型可以访问,类外不可以访问
class Person
{
public:
//公共权限
string my_Name;//姓名
protected:
string my_Car;//汽车
private:
string my_Password;//银行卡密码
public:
void func()
{
my_Name = "张三";
my_Car = "拖拉机";
my_Password = "1234567890";
}
};
int main()
{
Person p1;
p1.my_Name = "李四";//只有这个在外可以访问到
//保护权限内容和私有权限内容都无法访问
system("pause");
return 0;
}
struct和class的区别:
显而易见,class封装与struct结构体的用法十分相像,但是他们其实还是有所区别的
在C++中struct和class唯一的区别就在于默认的访问权限的不同
区别:
struct默认权限为公共
class默认权限为私有
那么下面的代码可以看出他们之间的不同:
#include <iostream>
using namespace std;
class C1
{
int m_A;//默认权限 是 私有
};
struct C2
{
int m_A;//默认权限 是 公共
};
int main()
{
//struct 和 class区别
//struct 默认权限是 公共 public
//class 默认权限是 私有 private
C1 c1;
C2 c2;
//c1.m_A = 100; 这个是访问不到的
//c2.m_A = 100; 这个是访问的到的
system("pause");
return 0;
}
成员属性设置为私有:
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#include <iostream>
#include <string>
using namespace std;
//成员属性设置为私有
//1.可以自己控制读写权限
//2.对于写可以检测数据的有效性
//设计人类
class Person
{
public:
//设置姓名
void setName(string name)
{
m_Name = name;
}
//获取姓名
string getName()
{
return m_Name;
}
//获取年龄 可读可写 年龄的范围必须是0~150之间
int getAge()
{
return m_Age;
}
void setLover(string lover)
{
m_Lover = lover;
}
void setAge(int age)
{
if (age < 0 || age > 150)
{
m_Age = 0;
cout << "你这个老妖精!" << endl;
return;
}
m_Age = age;
}
private:
//姓名 可读可写
string m_Name;
//年龄 只读
int m_Age;
//情人 只写
string m_Lover;
};
int main()
{
Person p;
p.setName("张三");
p.setLover("苍某");
p.setAge(1000);
cout << p.getName() << endl;
cout << p.getAge() << endl;
system("pause");
return 0;
}