• 极简c++(4)类的静态成员


    静态数据成员

    在这里插入图片描述
    ::是作用域操作符!

    #include
    using namespace std;
    
    class Point{
    	private:
    		int x,y;
    	public:
    		point(int x = 0,int y = 0):x(x),y(y){}
    		~point();
    		int getX(){return x;}
    		int getY(){return x;}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    假设需要统计点的个数,考虑添加一个数据成员;

    #include
    using namespace std;
    
    class Point{
    	private:
    		int x,y;
    		int count;
    	public:
    		point(int x = 0,int y = 0):x(x),y(y){}
    		~point();
    		int getX(){return x;}
    		int getY(){return x;}
    		void addcount(){count++;}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    这样非常的麻烦!所以我们采用静态属性

    #include
    using namespace std;
    
    class Point{
    	private:
    		int x,y;
    		static int count;
    	public:
    		point(int x = 0,int y = 0):x(x),y(y){}
    		~point();
    		int getX(){return x;}
    		int getY(){return x;}
    		void showCount(){cout<<count<<endl;}
    }
    int Point::count = 0;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    突出一个共享;

    #include
    using namespace std;
    
    class Point{
    	private:
    		int x,y;
    		static int count;
    	public:
    		Point(int x = 0,int y = 0):x(x),y(y){count++;}
    		~Point(){count--;};
    		int getX(){return x;}
    		int getY(){return x;}
    		void showCount(){cout<<count<<endl;}
    };
    int Point::count = 0;
    int main(){
    	Point a(4,5);
    	cout<<"PointA:"<<a.getX()<<","<<a.getY()<<endl;
    	a.showCount();
    	Point b;
    	cout<<"PointB:"<<b.getX()<<","<<b.getY()<<endl;
    	b.showCount();
    }
    
    运行结果:
    PointA:4,4
    1
    PointB:0,0
    2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    静态变量一般只用于“统计对象个数”这种必须多个对象共享的场合!

    静态成员函数

    在这里插入图片描述

    #include
    using namespace std;
    
    class Point{
    	private:
    		int x,y;
    		static int count;
    	public:
    		Point(int x = 0,int y = 0):x(x),y(y){count++;}
    		Point(Point &p) //复制构造函数
    		{
    			x = p.x;
    			y = p.y;
    			count++;
    		}
    		~Point(){count--;};
    		int getX(){return x;}
    		int getY(){return x;}
    		static void showCount(){cout<<count<<endl;}//只能包含静态数据成员
    };
    int Point::count = 0;
    int main(){
    	Point a(4,5);
    	cout<<"PointA:"<<a.getX()<<","<<a.getY()<<endl;
    	Point::showCount();//类名称调用静态函数
    	Point b;
    	cout<<"PointB:"<<b.getX()<<","<<b.getY()<<endl;
    	Point::showCount();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    思考:为什么在静态函数中只能包含静态变量

    复制构造函数,如果你没有创建,系统会自动为你创建
    在这里插入图片描述

    作业

    在这里插入图片描述
    静态数据成员存储在静态数据区,而不是每个对象的实例中

    #include
    using namespace std;
    
    class Rectangle{
    	private:
    		int width, height;
            static int count;
    	public:
    		Rectangle();//无参构造函数
    		Rectangle(int newwidth,int newheight);//有参构造函数
            ~Rectangle();
            static void getCount(){cout<<"矩形个数:"<<count<<endl;}
    		//内联函数,设置属性的值,一般只有这种很短的函数才可以写在定义中
    		//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;
            }
    		
    };
    
    int Rectangle::count = 0;
    
    Rectangle::Rectangle(){
    	this->width = 1;
    	this->height = 1;
        count++;
    }
    Rectangle::Rectangle(int newwidth,int newheight){
    	this->width = newwidth;
    	this->height = newheight;
        count++;
    }
    Rectangle::~Rectangle(){
        count--;
    }
    
    
    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;
        Rectangle::getCount();
    
        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;
        Rectangle::getCount();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    在这里插入图片描述

    //Rectangle.h
    #ifndef RECTANGLE_H
    #define RECTANGLE_H
    class Rectangle{
    	private:
    		int width, height;
            static int count;
    	public:
    		Rectangle();//无参构造函数
    		Rectangle(int newwidth,int newheight);//有参构造函数
            ~Rectangle();
            static void getCount(){};
    		//内联函数,设置属性的值,一般只有这种很短的函数才可以写在定义中
    		//this 表示的是当前对象的意思
    		void setWidth(int width);
    		void setHeight(int height);
    		//获得属性的值
    		int getWidth();
    		int getHeight();
            int getArea();
            int getPerimeter();
    };
    
    #endif
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    //Rectangle.cpp
    #include "Rectangle.h"
    #include 
    using namespace std;
    
    int Rectangle::count = 0;
    
    Rectangle::Rectangle(){
    	this->width = 1;
    	this->height = 1;
        count++;
    }
    Rectangle::Rectangle(int newwidth,int newheight){
    	this->width = newwidth;
    	this->height = newheight;
        count++;
    }
    Rectangle::~Rectangle(){
        count--;
    }
    void Rectangle::getCount(){cout<<"矩形个数:"<<count<<endl;}
    void Rectangle::setWidth(int width){this->width = width;}
    void Rectangle::setHeight(int height)
    {this->height = height;}
    //获得属性的值
    int Rectangle::getWidth(){return width;}
    int Rectangle::getHeight(){return height;}
    int Rectangle::getArea()
    {
    	int area = this->width * this->height;
    	return area;
    }
    int Rectangle::getPerimeter()
    {
    	int Perimeter = (this->width + this->height)*2;
    	return Perimeter;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    //job1.cpp
    #include "Rectangle.h"
    #include 
    using namespace std;
    
    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;
        Rectangle::getCount();
    
        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;
        Rectangle::getCount();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    uniapp之路由中携带参数跳转
    DoIP——step1:车辆连接
    创作纪念日:CSDN 1024天的成长之路
    NV21图片格式深入解析与代码实战-RGB转NV21与画框
    初阶c语言之浅识指针
    ciso模拟器配置RIP2
    搭建vue后台管理系统框架
    【stm32】FreeModbus 介绍 + 移植stm32f103 HAl库
    Linux实操篇-组管理和权限管理
    浪潮服务器安装CentOS 7 教程,并解决一直卡在 dracut问题
  • 原文地址:https://blog.csdn.net/weixin_45636780/article/details/133762099