极简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.rhkb.cn/news/158736.html

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

相关文章

计算机网络 | 网络层

计算机网络 | 网络层 计算机网络 | 网络层功能概述SDN&#xff08;Software-Defined Networking&#xff09;路由算法与路由协议IPv4IPv4 分组IPv4 分组的格式IPv4 数据报分片 参考视频&#xff1a;王道计算机考研 计算机网络 参考书&#xff1a;《2022年计算机网络考研复习指…

【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(VSCode 插件配置)

目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、下载插件 三、配置 cmake generator 四、编译工程 一、下载编译器 1、下载 Windows GCC 这里是在Windows环境下&#xff0c;所以下载的是 Windows 环境使用的 gcc 编译器。 下载地址: MinGW-w64 - for…

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

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

伦敦金的交易时间究竟多长?

接触过伦敦金交易的投资者&#xff0c;应该都知道自己根本不用担心市场上没有交易的机会&#xff0c;因为它全天的交易时间长达20多个小时&#xff0c;也就是在每一个正常的交易日&#xff0c;除去交易平台中途短暂的系统维护时间&#xff0c;投资者几乎全天都可以做盘。 伦敦金…

mssql还原数据库失败

标题: Microsoft SQL Server Management Studio ------------------------------ 服务器 "192.168.31.132" 的 附加数据库 失败。 (Microsoft.SqlServer.Smo) 有关帮助信息&#xff0c;请单击: https://go.microsoft.com/fwlink?ProdNameMicrosoftSQLServer&…

第四篇Android--TextView使用详解

TextView是View体系中的一员&#xff0c;继承自View&#xff0c;用于在界面中展示文字。 基本用法&#xff1a; <TextViewandroid:id"id/textview"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&q…

VScode运行C/C++

VScode运行C/C VScode的安装这里不讲 一、mingw64的下载 二、VS code打开文件夹与创建C文件 ----------------这一步给萌新看&#xff0c;有C和VScode的基础可跳过---------------- 1.创建一个文件夹 2.vscode打开刚刚创建的文件夹 3.新建文件&#xff0c;在输入文件名1.c后…

一种更具破坏力的DDoS放大攻击新模式

近日&#xff0c;内容分发网络&#xff08;CDN&#xff09;运营商Akamai表示&#xff0c;一种使网站快速瘫痪的DDoS放大攻击新方法正在被不法分子所利用。这种方法是通过控制数量巨大的中间设备&#xff08;middlebox&#xff0c;主要是指配置不当的服务器&#xff09;&#xf…

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

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

软件架构设计(业务架构、应用架构、数据架构、技术架构)

一、架构相关概念 1、系统 系统&#xff1a;由一群有关联的个体组成&#xff0c;根据某种规则运作&#xff0c;能完成个别原件不能独立完成的工作的群体。大的系统可以嵌套小系统&#xff0c;被嵌套的小系统往往称为大系统的子系统。 2、模块 模块是从逻辑上将系统分解&#…

一种针对嵌入式KEIL工程的版本管理和跟踪的python脚本

这是去年写的一个python脚本&#xff0c;和KEIL V5配套使用的&#xff0c;借助git对工程文件进行版本管理和跟踪。打包后的exe和源文件整理到网盘了&#xff0c;有需要的可以自取&#xff0c;链接&#xff1a;https://pan.quark.cn/s/6c28fb43e8dc 提取码&#xff1a;R17N 关于…

案例研究|DataEase助力无锡布勒业务数据可视化建设

布勒集团是一家来自瑞士的家族企业&#xff0c;在谷物与食品以及先进材料制造等领域深耕超过160年。布勒大中华区的总部位于江苏无锡。无锡布勒是一家集研发、生产、销售于一体的综合性公司&#xff0c;拥有先进的生产设备及高素质的科技研发人员&#xff0c;以谷物深加工、谷物…

dpdk/spdk/网络协议栈/存储/网关开发/网络安全/虚拟化/ 0vS/TRex/dpvs技术专家成长体系教程

课程围绕安全&#xff0c;网络&#xff0c;存储&#xff0c;云原生4个维度去讲解核心技术点。 6个专栏组成&#xff1a;dpdk网络专栏、存储技术专栏、安全与网关开发专栏、虚拟化与云原生专栏、测试工具专栏、性能测试专栏 一、dpdk网络 dpdk基础知识 多队列网卡&#xff0…

腾讯云 轻量云 上海 VPS 测评

description: 发布于 2023-07-05腾讯云 轻量云 上海 VPS 测评 腾讯云国内机非常稳定&#xff0c;一年用下来没有掉线丢包的情况。国内机适合与备案域名一起建站使用。带宽很小&#xff0c;图片资源使用CDN加速或海外机提供。 规格 CPU - 2核 内存 - 2GB 系统盘 - SSD云硬盘…

Dubbo—Admin 整体架构与安装步骤

​回顾 Dubbo 服务治理体系的总体架构&#xff0c;Admin 是服务治理控制面中的一个核心组件&#xff0c;负责微服务集群的服务治理、可视化展示等。 Admin 部署架构 总体上来说&#xff0c;Admin 部署架构分为以下几个部分&#xff1a; Admin 主进程&#xff0c;包括服务发现…

博客系统(java,MySQL,HTML)

项目展示&#xff1a; 1.输入 http://127.0.0.1:8080/blog_system/login.html 即可进入登录页面 2.输入正确的用户名和密码后进入博客列表页 要是用户名或密码输入错误&#xff0c;会弹出错误提示框 3.点击查看全文&#xff0c;可以进入博客详情页查看详细信息 4.点击写博客&a…

Unity实现摄像机向屏幕中间发射射线射击物体

1.创建一个准星放在屏幕中间 外部找个PNG透明图&#xff0c;拖到Unity文件夹&#xff0c;右上角改成精灵sprite2d 2.添加到UI画布 3.写脚本 首先&#xff0c;我们需要引入一些 "工具"&#xff0c;就像我们在玩游戏时要先下载游戏客户端一样。这里的 "工具&quo…

统一观测丨使用 Prometheus 监控 SQL Server 最佳实践

作者&#xff1a;啃唯 SQL Server 简介 SQL Server 是什么&#xff1f; Microsoft SQL Server 是 Microsoft 推出的关系型数据库解决方案&#xff0c;支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。Microsoft SQL Server 是市场领先的数据库技术之一。 SQL S…

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

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

Hexo+Github+Netlify博客搭建教程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 博客系列 ✨特色专栏&#xff1a; MyS…