极简c++(3)类的封装

类的封装

封装的含义是:
①所有属性都是私有的,外部不能直接访问
②提供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;
}

猜你喜欢

转载自blog.csdn.net/weixin_45636780/article/details/133747963