类的封装
封装的含义是:
①所有属性都是私有的,外部不能直接访问
②提供get和set函数,间接访问属性
//提供一个参考模板,以后都可以按这个模板来书写
#include<iostream>
using namespace std;
class clock{
private:
int hour,minute,second;
public:
clock();//无参构造函数
clock(int NewH,int NewM, int NewS);//有参构造函数
//内联函数,设置属性的值,一般只有这种很短的函数才可以写在定义中
//this 表示的是当前对象的意思
void setHour(int hour)
{
this->hour = hour;
}
void setMinute(int minute)
{
this->minute = minute;
}
void setSecond(int second)
{
this->second = second;
}
//获得属性的值
int getHour()
{
return hour;
}
int getMinute()
{
return minute;
}
int getSecond()
{
return second;
}
void display(){
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
};
//clock:clock():hour(1),minute(1),second(1){}
//clock:clock():hour(NewH),minute(NewM),second(NewS){}
clock::clock(){
this->hour = 1;
this->minute = 1;
this->second = 1;
}
clock::clock(int newH,int newM,int newS){
this->hour = newH;
this->minute = newM;
this->second = newS;
}
int main(){
clock myclock1;
cout<<"利用无参构造函数创建的时间对象"<<endl;
myclock1.display();
clock myclock2(8,3,30);
cout<<"利用有参构造函数创建的时间对象"<<endl;
myclock2.display();
myclock2.setHour(21);
cout<<"利用set函数修改的时间对象"<<endl;
myclock2.display();
return 0;
}
数据域封装的优点
1.防止对封装数据的越权访问
2.限制私有特性改变的时候产生的连锁反应
如果有封装,修改后的代码完全不受影响;
数据隐藏的越好,后续修改的权利越大,黑匣子里的可以修改,可见部分不建议改
如果没有封装,会出现 int currentAge = s.age; 那么将需要你一行一行去修改
3.保持数据的完整性
私有的函数可以被类里面的函数调用,这个代码完成了对日期格式的检查;
作业
#include<iostream>
using namespace std;
class Rectangle{
private:
int width, height;
public:
Rectangle();//无参构造函数
Rectangle(int newwidth,int newheight);//有参构造函数
//内联函数,设置属性的值,一般只有这种很短的函数才可以写在定义中
//this 表示的是当前对象的意思
void setWidth(int width)
{
this->width = width;
}
void setHeight(int height)
{
this->height = height;
}
//获得属性的值
int getWidth()
{
return width;
}
int getHeight()
{
return height;
}
int getArea(){
int area = this->width * this->height;
return area;
}
int getPerimeter(){
int Perimeter = (this->width + this->height)*2;
return Perimeter;
}
};
Rectangle::Rectangle(){
this->width = 1;
this->height = 1;
}
Rectangle::Rectangle(int newwidth,int newheight){
this->width = newwidth;
this->height = newheight;
}
int main(){
Rectangle myRectangle1;
cout<<"利用无参构造函数创建的时间对象"<<endl;
int W1 = myRectangle1.getWidth();
int H1 = myRectangle1.getHeight();
int A1 = myRectangle1.getArea();
int P1 = myRectangle1.getPerimeter();
cout<<"矩形的长为:"<<W1<<endl<<"矩形的宽为:"<<H1<<endl<<"矩形的面积为:"<<A1<<endl<<"矩形的周长为:"<<P1<<endl;
int W2,H2;
cin>>W2>>H2;
Rectangle myRectangle2(W2,H2);
cout<<"利用有参构造函数创建的时间对象"<<endl;
int A2 = myRectangle2.getArea();
int P2 = myRectangle2.getPerimeter();
cout<<"矩形的长为:"<<W2<<endl<<"矩形的宽为:"<<H2<<endl<<"矩形的面积为:"<<A2<<endl<<"矩形的周长为:"<<P2<<endl;
return 0;
}