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

静态数据成员

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

#include<iostream>
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;}
}

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

#include<iostream>
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++;}
}

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

#include<iostream>
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;

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

#include<iostream>
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

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

静态成员函数

在这里插入图片描述

#include<iostream>
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();
}

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

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

作业

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

#include<iostream>
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;
}

在这里插入图片描述

//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
//Rectangle.cpp
#include "Rectangle.h"
#include <iostream>
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;
}
//job1.cpp
#include "Rectangle.h"
#include <iostream>
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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【mfc/VS2022】计图实验:绘图工具设计知识笔记

绘制曲线&#xff08;贝塞尔曲线&#xff09;&#xff1a; 转自&#xff1a;CDC 类 | Microsoft Learn 绘制一条或多条贝塞尔曲线。 BOOL PolyBezier(const POINT* lpPoints,int nCount);参数 lpPoints 指向包含曲线端点和控制点的 POINT 数据结构数组。 nCount 指定 lpPo…

使用kaliber与imu_utils进行IMU、相机+IMU联合标定

目录 1 标定工具编译 1.1 IMU标定工具 imu_utils 1.2 相机标定工具 kaliber 2 标定数据录制 3 开始标定 3.1 IMU标定 3.2 相机标定 3.3 相机IMU联合标定 4 将参数填入ORBSLAM的文件中 1 标定工具编译 1.1 IMU标定工具 imu_utils 标定IMU我们使用imu_utils软件进行标定…

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Linux CentOS8安装gitlab_ce步骤

1 下载安装包 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm/download.rpm2 安装gitlab yum install policycoreutils-python-utilsrpm -Uvh gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm3 更新配…

Stm32_标准库_12_串口_发送数据

波特率&#xff1a;约定的传输速率&#xff0c;1000bps,1s发1000位 引脚 结构 数据帧的传输特点 代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h"GPIO_InitTypeDef GPIO_InitStruct; USART…

2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人…

【算法-动态规划】两个字符串的删除操作-力扣 583

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Idea创建springboot工程的时候,发现pom文件没有带<parent>标签

今天创建springboot工程&#xff0c;加载maven的时候报错&#xff1a; 这个问题以前遇到过&#xff0c;这是因为 mysql-connector-j 没有带版本号的原因&#xff0c;但是springboot的依赖的版本号不是都统一交给spring-boot-starter-parent管理了吗&#xff0c;为什么还会报错&…

Redis 集群 Redis 事务 Redis 流水线 Redis 发布订阅 Redis Lua脚本操作

Redis 集群 & Redis 事务 & Redis 流水线 & Redis 发布订阅 Redis 集群linux安装redis主从配置查看当前实例主从信息 Redis Sentinelsentinel Redis Cluster Redis 事务Redis 流水线Redis 发布订阅Redis Lua脚本操作 Redis 集群 linux安装redis 下载安装包&#…

五子棋(C语言实现)

目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版&#xff1a; game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了&#xff0c;大家小时候都玩过哈。 我们要通过程序实现这个小游戏&…

C++算法:最短回文串

题目 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1&#xff1a; 输入&#xff1a;s “aacecaaa” 输出&#xff1a;“aaacecaaa” 示例 2&#xff1a; 输入&#xff1a;s “abcd” 输…

Django框架集成Celery异步-【2】:django集成celery,拿来即用,可用操作django的orm等功能

一、项目结构和依赖 study_celery | --user |-- models.py |--views.py |--urls.py |--celery_task |--__init__.py |--async_task.py |-- celery.py | --check_task.py | --config.py | --scheduler_task.py | --study_celery | --settings.py | --manage.py 依赖&#xff1a…

ChatGPT

chatgpt使用地址 https://mycaht.top/#/chat 申请内测免费key https://github.com/chatanywhere/GPT_API_free 设置 接口地址设置改成 https://api.chatanywhere.com.cnAPI Key设置成申请出来的免费key 开始聊天

关于网络协议的若干问题(五)

1、DH 算法会因为传输随机数被破解吗&#xff1f; 答&#xff1a;DH 算法的交换材料要分公钥部分和私钥部分&#xff0c;公钥部分和其他非对称加密一样&#xff0c;都是可以传输的&#xff0c;所以对于安全性是没有影响的&#xff0c;而且传输材料远比传输原始的公钥更加安全。…

zabbix触发器与动作

一、触发器&#xff08;Trigger&#xff09; 1、概念&#xff1a; 在 Zabbix 中&#xff0c;触发器用于监测 Zabbix 监控系统中的各种指标和条件&#xff0c;并在特定条件满足时触发警报。&#xff08;触发器用于定义监控项的报警阈值&#xff09; 2、触发器对象&#xff1a…

2核4G服务器支持多少用户同时在线访问?卡不卡?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;从CPU内存的角度&#xff0c;网站程序效…

【数据结构】排序--插入排序(希尔排序)

目录 一 基本思想 二 直接插入排序 三 希尔排序 一 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 。 实际中我们玩扑克牌时&#xff0c;就用了插入排序的思想 二…

【Linux】进程概念讲解

前言 在了解进程概念之前&#xff0c;还有很多东西需要我们先了解&#xff0c;以助我们更好地学习以后的知识 大部分都是概念的东西&#xff0c;大部分大概有个印象就好了 冯诺依曼体系结构&#xff08;硬件方面&#xff09; 当代计算机的设计都是按照冯诺依曼体系结构设计…

快速修复“找不到xinput1_3.dll无法继续执行此代码的”问题的5个方法

在计算机系统中&#xff0c;DLL&#xff08;动态链接库&#xff09;是一个重要的组件&#xff0c;它负责在程序和操作系统之间进行有效的通信。然而&#xff0c;有时候我们可能会遇到“xinput1_3.dll”文件出现问题的情况&#xff0c;这可能会导致系统不稳定甚至无法正常运行。…

Git 回退代码的两种方法对比

Git 回退代码版本 在项目的开发中&#xff0c;有时候还是会出现&#xff0c;一些误提交了一些代码&#xff0c;这时候就会想撤回提交的代码&#xff0c;在Git中有两种方法可以使用&#xff0c;现在通过对比方法比较这两种方法的区别&#xff0c;分别适用于哪些情况&#xff1f…