C语言封装风格:
C语言中 将数据放到一起用struct打包,然后把数据以引用或者指针的方式传递给行为函数。
(C中 数据和行为函数是分开的,C++中struct可放在一起。但是用C++用struct封装的类,既知其接口,又可以直接访问其内部数据,这样却没有达到信息隐蔽的功效 --> 由此引出C++的类:类名也是一种变相的命名空间)
C++封装
1、数据和行为分开,没有权限控制。
2、对内数据开放,逻辑抽象。
3、对外仅提供接口,屏蔽数据
封装权限:
struct 中所有行为和属性都是 public 的(默认),此举也是为了C++兼容 C 语言,因为 C 语言中没有权限的概念。
C++中的class可以指定行为和属性的访问方式,默认为 private,此举要求你必须指定权限,不然就没有办法外部访问。
封装,可以使之对外提供接口,屏蔽数据;对内开放数据。
访问属性 | 属性 | 对象内部 | 对象外部 |
---|---|---|---|
public | 公有 | 可以访问 | 可以 |
private | Class私有 | 可以 | 不可以 |
protected | 保护 | 可以 | 不可以 |
//简单的封装示意:
#include <iostream>
using namespace std;
//C语言的封装风格:数据放到一起用struct打包 然后把数据以引用或者指针的方式传递给行为
//C++认为C语言封装不彻底。
//数据和行为分开,没有权限控制。对内数据开放,逻辑抽象。对外仅提供接口
//声明和实现可分开
//class 增加权限控制,数据和行为在一起
class Date
{
public:
int year; //数据
void print (); //行为
private:
int month = 6;
int day = 7;
};
// Class_name :: func ::(域)全局成员函数运算符
void Date::print ()
{
cout<<"year:\t"<<"month:\t"<<"day:\t"<<endl;
cout<<year<<"\t"<<month<<"\t"<<day<<endl;
}
int main()
{
Date d;
d.year = 2019;//public
//d.day = 7; //private error:'int Date::day' is private
d.print();
return 0;
}