C++ 类的封装

使用构造体构造一个Date

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;

struct Date
{
	int year;
	int month;
	int day;
};

//初始化这个结构体
void init_date(struct Date& date)
{
	cout << "year, month, day" << endl;
	cin >> date.year;
	cin >> date.month;
	cin >> date.day;
}

//打印此结构体
void print_data(struct Date& date)
{
	cout << "日期是" << date.year << "年" << date.month << "月" << date.day << "日" << endl;
}

//判断是否为闰年
bool is_leap_year(struct Date& date)
{
	if (((date.year % 4 == 0) && (date.year % 100 != 0)) || (date.year % 400 == 0)) {
		return true;
	}
	else {
		return false;
	}
}

int main(void)
{
	Date dl;

	init_date(dl);
	print_data(dl);
	if (is_leap_year(dl) == true) {
		cout << "是闰年" << endl;
	}
	else {
		cout << "不是闰年" << endl;
	}

	return 0;
}

通过class对以上构造体Date代码重构

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;

class MyDate
{
	
public://访问控制权限  //在public标识符下面定义的成员变量和成员函数 均可以在类的外部和类的内部 访问

	int get_year()
	{
		return year;
	}

	void set_year(int new_year) {
		year = new_year;
	}

	void init_date() { // 成员方法
		cout << "year, month, day" << endl;
		cin >> year;
		cin >> month;
		cin >> day;
	}

	//成员函数
	bool is_leap_year()
	{
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
			return true;
		}
		else {
			return false;
		}
	}

	void print_date() {
		cout << "日期是" << year << "年" << month << "月" << day << "日" << endl;
	}

protected://在类的继承中跟private有区别,如果是单个类, 跟private是一样的, 在类的内部能够访问,在类的外部不能够访问
private://private 访问控制符 下定义的成员变量和成员函数 只能在类的内部访问
	int month;
	int day;
	int year;
};

int main(void)
{

	MyDate date; //通过MyDate 类 实例化一个对象

	//c++中 是面向对象进行开发,所有方法都封装在类中, 通过一个一个的对象进行编程。
	date.init_date();
	if (date.is_leap_year() == true) {
		cout << "是闰年" << endl;
	}
	else {
		cout << "不是闰年" << endl;
	}

	date.print_date();


	// 在类中可以设置getter,setter方法,为外部提供的类或函数提供访问或修改private修饰的属性的值 
	cout << "修改前:" << date.get_year() << endl;
	date.set_year(2020);
	cout << "修改后:" << date.get_year() << endl;

}
访问属性属性对象内部对象外部
public公有可访问可访问
protected保护可访问不可访问
private私有可访问不可访问

注:truct 中所有行为和属性都是  public 的(默认)。C++中的 class 可以指定行 为和属性的访问方式。  封装,可以达到,对内开放数据,对外屏蔽数据,对外提供接口。达到了信息隐蔽的功能。 


在类中可以设置getter,setter方法,为外部提供的类或函数提供访问或修改private修饰的属性的值

private://private 访问控制符 下定义的成员变量和成员函数 只能在类的内部访问
	int month;
	int day;
	int year;
public:
	int get_year(){
		return year;
	}
	
	void set_year(int new_year) {
		year = new_year;
	}
cout << "修改前:" << date.get_year() << endl;
date.set_year(2020); // 通过类中提供的方法,对私有属性的值进行修改
cout << "修改后:" << date.get_year() << endl;

封装有2层含义(把属性和方法进行封装  对属性和方法进行访问控制) 

  • Public修饰成员变量和成员函数可以在类的内部和类的外部被访问。
  • Private修饰成员变量和成员函数只能在类的内部被访问。 

struct 的内部默认访问权限和 class的内部默认访问权限

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;

class VVcat {
	int year;
};

// 一个结构体默认的访问控制权限的是public
struct VVcat2 {
	int year;

	void print() {

	}
};

int main(void)
{
	VVcat v;
	// 无法通过v.属性名,访问类中的默认的private属性

	VVcat2 v2;
	v2.year = 6;
	cout << v2.year << endl;
}

面向对象有三大特点:封装,继承,多态

  • 类的{}中的所有区域称为 类的 内部, 除了{ }区域以外都是 类的外部
  • C++将struct 做了功能的增强,struct实际上就是一个class
  • struct的类的内部,默认的访问控制权限是public
  • class 的类的内部,默认的访问控制权限是private
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值