面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!
我们今天就来认识封装有关的知识。
在C++中,类封装通常分为下边两个部分
-类的实现细节
-类的使用方式
在我们使用别人提供的类时,我们只关注于如何使用,而不关心类的具体实现;我们在给别人提供类时,别人也只是关心如何使用类,我们自己就必须懂得类的具体实现。
-使用类时,不需要关心类的实现细节
-创建类时,才需要考虑其内部实现细节
1、什么是封装?
- 封装是隐藏对象的属性和实现的细节,对外只保留一个接口与对象交互,将数据与操作数据的方法进行有机结合。
在这里简单举一个例子:
class people //定义一个人的类
{
public:
string name; //数据成员
int age; //数据成员
bool sex; //数据成员
double height;
int eat(); //数据方法
};
函数是封装的一种形式:函数所执行的细节行为被封装在函数本身这个更大的实体中,被封装的元素隐藏了它们的实现细节–可以调用一个函数但是不能够访问函数所执行的语句。
- 访问限定符:
(1)public(共有) :程序中任意位置都可以访问
(2)private(私有):只有本类可以访问
(3)protected(保护):本类和子类可以访问
class的默认访问权限是private,而struct为public型(因为struct要兼容C)。C++常用的是class 。
在这里写个简单程序进行描述:
class Boy
{
private:
int height;
int money;
public:
int age;
int weight;
void print()
{
int height = 179;
int money=10000;
cout<<"I am a boy,my height is "<<height<<" cm"<<endl;
cout<<"my money is "<<money<<" dollars"<<endl;
}
};
class Gril
{
private:
int age;
int weight;
public:
void print()
{
int age=20;
int weight=50;
cout<<"I am a gril,my age is "<< age<<endl;
cout<<"my weight is "<<weight<<" KG"<<endl;
}
};
int main()
{
Boy b;
Gril g;
//g.age=18;//error age为私有成员属性,类外不能访问
b.age=18;//公有成员属性,类外可进行访问
g.print();//OK
b.print();
}
下面来说说类成员的作用域
-类成员的作用域都只在类的内部,外部无法直接访问
-成员函数可以直接访问成员变量和调用成员函数
-类的外部可以通过类变量访问public成员
-类成员的作用域与访问级别没有关系
C++中用struct定义的类中所有成员默认为public属性;class定义的类中所有成员默认为private属性