C++_类_封装

从struct说起

  • 当单一变量无法完成描述需求的时候,结构体类型解决了这一问题。可以将多个类型
    打包成一体,形成新的类型。这是 c 语言中封装的概念。
  • 新类型并不包含,对数据类的操作,所的有操作都是通过函数的方式
  • C语言struct例子:
#include <iostream>
using namespace std;
struct Date      //数据的封装
{
	int year;
	int month;
	int day;	
};
//下面的是行为,是对数据的处理和分析
void init(Date &d)     
{
	cout<<"year,month,day:"<<endl;
	cin>>d.year>>d.month>>d.day;
}
void print(Date & d)
{
	cout<<"year month day"<<endl;
	cout<<d.year<<":"<<d.month<<":"<<d.day<<endl;
}
bool isLeapYear(Date & d)
{
	if((d.year%4==0&& d.year%100 != 0) || d.year%400 == 0)
		return true;
	else
		return false;
}
int main()
{
	Date d;
	init(d);
	print(d);
	d.year = 2017;    ///这就是这样写的弊端,可以随意更改,不安全
	if(isLeapYear(d))
		cout<<"leap year"<<endl;
	else
		cout<<"not leap year"<<endl;
	return 0;
}

封装的访问属性

在这里插入图片描述

  • struct 中所有行为和属性都是 public 的(默认)。C++中的 class 可以指定行为和属性的
    访问方式。
  • 我们用 struct 封装的类,即知其接口,又可以直接访问其内部数据,这样却没有达到信息隐蔽的功效。而 class 则提供了这样的功能,屏蔽内部数据,对外开放接口

用class 去封装带行为的类

  • class 封装的本质,在于将数据和行为,绑定在一起然后通过对象来完成操作
  • 访问自己的成员 可以不需要能过传引用的方式
#include <iostream>
using namespace std;
class Date   //类名本身就是一个命名空间
{
public:		//如果不写这个默认是私有的
	void init();		 //封装到一起之后不需要有参数
	void print();
	bool isLeapYear();
private:
	int year;
	int month;
	int day;
};
void Date::init()		//也可以把函数直接实现在类的声明里面
{
	cout<<"year,month,day:"<<endl;
	cin>>year>>month>>day;
}
void Date::print()
{
	cout<<"year month day"<<endl;
	cout<<year<<":"<<month<<":"<<day<<endl;
}
bool Date::isLeapYear()
{
	if((year%4==0&& year%100 != 0) || year%400 == 0)
		return true;
	else
		return false;
}
int main()
{
	Date d;
	d.init();
	d.print();
	if(d.isLeapYear())
		cout<<"leap year"<<endl;
	else
		cout<<"not leap year"<<endl;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值