使用构造体构造一个Date

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using&nbsp;namespace&nbsp;std;

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

//初始化这个结构体
void&nbsp;init_date(struct&nbsp;Date&amp;&nbsp;date)
{
cout&nbsp;&lt;&lt;&nbsp;&quot;year,&nbsp;month,&nbsp;day&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;date.year;
cin&nbsp;&gt;&gt;&nbsp;date.month;
cin&nbsp;&gt;&gt;&nbsp;date.day;
}

//打印此结构体
void&nbsp;print_data(struct&nbsp;Date&amp;&nbsp;date)
{
cout&nbsp;&lt;&lt;&nbsp;&quot;日期是&quot;&nbsp;&lt;&lt;&nbsp;date.year&nbsp;&lt;&lt;&nbsp;&quot;&quot;&nbsp;&lt;&lt;&nbsp;date.month&nbsp;&lt;&lt;&nbsp;&quot;&quot;&nbsp;&lt;&lt;&nbsp;date.day&nbsp;&lt;&lt;&nbsp;&quot;&quot;&nbsp;&lt;&lt;&nbsp;endl;
}

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

int&nbsp;main(void)
{
Date&nbsp;dl;

init_date(dl);
print_data(dl);
if&nbsp;(is_leap_year(dl)&nbsp;==&nbsp;true)&nbsp;{
cout&nbsp;&lt;&lt;&nbsp;&quot;是闰年&quot;&nbsp;&lt;&lt;&nbsp;endl;
}
else&nbsp;{
cout&nbsp;&lt;&lt;&nbsp;&quot;不是闰年&quot;&nbsp;&lt;&lt;&nbsp;endl;
}

return&nbsp;0;
}

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

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using&nbsp;namespace&nbsp;std;

class&nbsp;MyDate
{

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

int&nbsp;get_year()
{
return&nbsp;year;
}

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

void&nbsp;init_date()&nbsp;{&nbsp;// 成员方法
cout&nbsp;&lt;&lt;&nbsp;&quot;year,&nbsp;month,&nbsp;day&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;year;
cin&nbsp;&gt;&gt;&nbsp;month;
cin&nbsp;&gt;&gt;&nbsp;day;
}

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

void&nbsp;print_date()&nbsp;{
cout&nbsp;&lt;&lt;&nbsp;&quot;日期是&quot;&nbsp;&lt;&lt;&nbsp;year&nbsp;&lt;&lt;&nbsp;&quot;&quot;&nbsp;&lt;&lt;&nbsp;month&nbsp;&lt;&lt;&nbsp;&quot;&quot;&nbsp;&lt;&lt;&nbsp;day&nbsp;&lt;&lt;&nbsp;&quot;&quot;&nbsp;&lt;&lt;&nbsp;endl;
}

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

int&nbsp;main(void)
{

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

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

date.print_date();


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

}

访问属性

属性

对象内部

对象外部

public

公有

可访问

可访问

protected

保护

可访问

不可访问

private

私有

可访问

不可访问

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


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

private://在private 访问控制符 下定义的成员变量和成员函数 只能在类的内部访问
int&nbsp;month;
int&nbsp;day;
int&nbsp;year;
public:
int&nbsp;get_year(){
return&nbsp;year;
}

void&nbsp;set_year(int&nbsp;new_year)&nbsp;{
year&nbsp;=&nbsp;new_year;
}
cout&nbsp;&lt;&lt;&nbsp;&quot;修改前:&quot;&nbsp;&lt;&lt;&nbsp;date.get_year()&nbsp;&lt;&lt;&nbsp;endl;
date.set_year(2020);&nbsp;// 通过类中提供的方法,对私有属性的值进行修改
cout&nbsp;&lt;&lt;&nbsp;&quot;修改后:&quot;&nbsp;&lt;&lt;&nbsp;date.get_year()&nbsp;&lt;&lt;&nbsp;endl;

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

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

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

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using&nbsp;namespace&nbsp;std;

class&nbsp;VVcat&nbsp;{
int&nbsp;year;
};

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

void&nbsp;print()&nbsp;{

}
};

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

VVcat2&nbsp;v2;
v2.year&nbsp;=&nbsp;6;
cout&nbsp;&lt;&lt;&nbsp;v2.year&nbsp;&lt;&lt;&nbsp;endl;
}

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

  • 类的{}中的所有区域称为 类的 内部, 除了{ }区域以外都是 类的外部
  • C++将struct 做了功能的增强,struct实际上就是一个class
  • struct的类的内部,默认的访问控制权限是public
  • class 的类的内部,默认的访问控制权限是private