学习目标:
掌握封装的形式,内部属性、成员以及相关权限的调用!!!
学习内容:
1. 示例一:计算圆的面积
#include<iostream>
using namespace std;
#define PI 3.1415926
//const double PI=3.1415926
class Circle
{
public:
int m_r; //属性
double result()//行为,通常用一个函数来表示
{
return PI * m_r * m_r;
}
};
int main()
{
Circle c; //通过类来创建对象-------实例化
c.m_r = 10; //对象的属性进行赋值
cout << "圆的面积为:" << c.result() << endl;
system("pause");
return 0;
}

注意:
- 类中的属性和行为都统称为成员;
- 属性----->成员属性;
- 行为----->成员函数;
2. 类中的权限说明
在设计类的时候,可以把属性和行为放在不同的权限下,便于控制。权限一般有三种:
public(公共权限): 类内和类外都可以访问;
protected(保护权限):类内可以访问,但是类外不能访问;
private(私有权限):类内可以访问,但是类外不能访问;
protected和private在访问权限上的区别会在继承
上有体现。
类(class)和结构体(struct)的权限区别:
类(class):默认为 private(私有);
结构体(struct):默认为 public(公共)
3. 类中成员属性私有化
我们将成员属性设置为私有,主要有以下两个优点:
- 只要提供public的接口,自己就可以控制读写权限;
- 对于写权限,可以检测数据的有效性;
3.1 提供public的接口,自己控制读写权限
在一个类中,我们将属性设置为私有属性,在类外是不能调用的,但是我们可以提供public的接口进行类内设置。
1.在类内设置私有属性:
2.在类内提供类外调用的接口public,以便类外传值:
代码演示:
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
//姓名可读可写
void setName(string name)
{
m_Name = name;
}
string getName()
{
return m_Name;
}
//年龄可读
int getAge()
{
m_Age = 0;
return m_Age;
}
private:
string m_Name;//可读可写
int m_Age;//只读
};
int main()
{
Person p;
p.setName("jack");
cout << "姓名为:" << p.getName() << endl;//可读可写
cout << "年龄为:" << p.getAge() << endl;//只读
system("pause");
return 0;
}
3.2 在写权限中检测数据的有效性
将成员属性设置为私有,利用public接口外部调用时可以对条件进行判断:
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
void setAge(int age )
{
if (age < 0 || age >100)
{
cout << "您的年龄太不可思议了哦!!" << endl;
return;
}
m_Age = age;
cout << "您的年龄为:" << m_Age << endl;
}
private:
int m_Age;
};
int main()
{
Person p;
p.setAge(10);
system("pause");
return 0;
}