前言
C++认为万事万物皆为对象,对象上有其属性和行为。
例如:
人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、唱歌…
车也可以作为对象,属性有轮胎、方向盘、车灯…,行为有载人、放音乐…
具有相同类型的对象,我们可以抽象称为类,人属于人类,车属于车类。
C++面向对象的三大属性为:封装、继承、多态
本章主要介绍C++面向对象的三大特征之一——封装。
提示:以下是本篇文章正文内容,下面案例可供参考
一、封装的意义
- 将属性和行为作为一个整体,表现生活中的事物。
- 将属性和行为加以权限控制
案例1
封装意义1 将属性和行为作为一个整体,表现生活中的事物
代码如下(示例):
#include <iostream>
using namespace std;
const double PI = 3.14;
//设计一个圆类
class Circle //class 类的名称
{
//权限(后续会说)
//公共权限
public:
//属性
int m_r;
//行为
double calculateZC()
{
return 2 * PI * m_r;
}
};
int main()
{
Circle c1; //通过圆类,创建具体的圆(对象)
c1.m_r = 10; //给圆(对象)的属性赋值
cout << "圆的周长为:" << c1.calculateZC() << endl;
system("pause");
return 0;
}
运行结果如下:
案例2 访问权限
封装意义2 类在设计时,可以把属性和行为放在不同的权限下,加以控制。
访问权限有三种:
1、public: 公共权限
类内可以访问,类外也可以访问。
2、protected: 保护权限
类内可以访问,类外不可以访问。
3、private: 私有权限
类内可以访问,类外不可以访问。
保护权限与私有权限在继承中会详解,在此简单理解一下子。
保护权限呢,就是儿子可以访问父亲的保护内容。
私有权限呢,就是儿子不能访问父亲的私有内容。
代码如下(示例):
#include <iostream>
#include <string>
using namespace std;
class Person //class大括号里的均为类内,大括号外的均为类外
{
public: //公共属性
string m_Name; //姓名
protected:
string m_Car; //汽车
private:
int m_Password; //银行卡密码
public:
void func()
{
m_Name = "张三";
m_Car = "奔驰"; //拖拉机太惨了,还是奔驰吧
m_Password = 12345678;
}
};
int main()
{
Person s1;
s1.m_Password = 123456;
system("pause");
return 0;
}
把鼠标放到 s1.m_Passward 上会出现以下图片上的内容:
由此可见,s1.m_Password 是不可访问的。同理,s1.m_Car也是不可访问的。
二、C++中class和struct的区别
在C++中,struct和class的唯一区别就是 默认的访问权限不同
区别:
- struct 默认权限为公共
- class 默认权限为私有
代码案例
代码如下(示例):
#include <iostream>
using namespace std;
class C1
{
int m_A;
};
struct C2
{
int m_A;
};
int main()
{
C1 c1;
C2 c2;
c1.m_A = 10; //class默认的权限为私有,因此不可以访问
c2.m_A = 20; //struct默认的权限为公共,因此可以访问
system("pause");
return 0;
}
如图,生成时会出现以上错误。
三、成员属性设置为私有
优点
- 将所有成员属性设置为私有,可以自己控制读写权限
- 对于写权限,我们可以检测数据的有效性
代码案例
代码如下(示例):
#include <iostream>
#include <string>
using namespace std;
class Person
{
public: //*自己控制读写权限*
//获取姓名 只读
void getName()
{
cout << "姓名为:" << m_Name << endl;
}
//获取年龄 可读
void getAge()
{
cout << "年龄为:" << m_Age << endl;
}
//设置年龄 只写
void setAge(int age)
{
if (age < 0 || age > 150) //*检测数据的有效性*
{
m_Age = 0;
cout << "你可真是个老妖精!" << endl;
return;
}
m_Age = age;
}
//设置情人 只写
void setLover(string lover)
{
m_Name = lover;
m_Lover = lover;
}
private:
//姓名 只读
string m_Name;
//年龄 可读可写
int m_Age;
//情人 只写(不要在意细节emmmm)
string m_Lover;
};
int main()
{
Person p;
//写
p.setAge(20);
p.setLover("苍井"); //节目效果,不要怪我嚯
//读
p.getName();
p.getAge();
system("pause");
return 0;
}
运行结果如下:
设置只写权限就写一个set函数,只读权限就写一个get函数,可读可写那两个函数都写。
总结
以上就是封装的基本内容啦,最后来一个灵魂拷问,你有对象了吗?啊哈哈哈哈哈哈。