目录
静态数据成员
静态成员函数
首页 后端开发 C#.Net教程 C++类的静态数据成员和静态成员函数

C++类的静态数据成员和静态成员函数

Aug 06, 2018 pm 04:16 PM
c

静态数据成员

·用关键字static声明

·当声明类的数据成员为静态时,无论创建多少个类的对象,静态成员都只有一个副本

·在类的所有对象中共享,具有静态生存期

·若不存在其他的初始化语句,在创建第一个对象时,所有的静态数据成员被初始化为零

·在类外定义和初始化,用范围解析运算符(::)来指明所属的类

举例:

#include <iostream>
using namespace std;

class Box {
public:
	static int count;    //若该静态数据成员在private部分声明,则只能通过静态成员函数处理
	Box(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "One constructor was called." << endl;
		length = l, width = b, height = h;
		count++;	//每创建一个对象时加1
	}
	double Volume() {
		return length * width * height;
	}
	~Box() { count--; }
private:
	double length, width, height;
};
//初始化类Box的静态成员
int Box::count = 0;

int main(void) {
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(8.5, 6.0, 2.0);
	cout << "Total objects: " << Box::count << endl;	//输出对象的总数
	return 0;
}
登录后复制

静态成员函数

把成员函数声明为静态的,就可以把函数与类的任何特定对象独立开来

·在类对象不存在的情况下也能被调用,使用类名加范围解析运算符 :: 即可访问

·静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数

·静态成员函数有一个类范围,不能访问类的 this 指针,可以使用静态成员函数来判断类的某些对象是否已被创建

·用静态成员函数访问非静态成员,需通过对象

举例:

#include <iostream>
using namespace std;

class Box {
public:
	static int count;
	Box(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout <<"One constructor was called." << endl;
		length = l, width = b, height = h;
		count++;
	}
	double Volume() {
		return length * width * height;
	}
	static int getCount() {	//静态成员函数 
		return count;
	}
private:
	double length, width, height;
};
int Box::count = 0;

int main(void) {
	//在创建对象之前输出对象的总数
	cout << "Inital Stage Count: " << Box::getCount() << endl;
	
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(8.5, 6.0, 2.0);
	
	//在创建对象之后输出对象的总数
	cout << "Final Stage Count: " << Box::getCount() << endl;
	return 0;
}
登录后复制

注:

静态成员函数与普通成员函数的区别:

·静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)

·普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针

使用静态成员了解构造与析构函数的调用情况

#include <iostream>
using namespace std;

class A {
	friend class B;	//类B是类A的友元 
public:
	static int value;
	static int num;
	A(int x, int y) {
		xp = x, yp = y;
		value++;
		cout << "调用构造:" << value << endl;
	}
	void displayA() {
		cout << xp << "," << yp << endl;
	}
	~A() {
		num++;
		cout << "调用析构:" << num << endl;
	}
private:
	int xp, yp;
};
class B {
public:
	B(int x1, int x2) : mpt1(x1 + 2, x2 - 2), mpt2(x1, x2) {
		cout << "调用构造\n";	//mpt是类A的对象,有几个mpt,有关类A的操作便执行几次 
	}
	void set(int m, int n);
	void displayB();
	~B() {
		cout << "调用析构\n";	//析构函数在类结束前调用,类结束的时候释放类申请的空间
	} 
private:
	A mpt1, mpt2;		//将A类的对象声明为B类的私有数据成员 
};

int A::value = 0;
int A::num = 0;
void B::set(int m, int n) {
	mpt1.xp = m * 2, mpt1.yp = n / 2;
}
void B::displayB() {
	mpt1.displayA();
}

int main() {
	B p(10, 20);
	cout << "Hello world!" << endl;
	B displayB();    //通过友元,使类B输出类A的私有数据成员
	return 0;
}
登录后复制

相关文章:

C++静态成员与常成员的使用

C++复习要点总结之五静态成员变量及成员函数

以上是C++类的静态数据成员和静态成员函数的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C语言中的常量是什么,可以举一个例子吗? C语言中的常量是什么,可以举一个例子吗? Aug 28, 2023 pm 10:45 PM

常量也称为变量,一旦定义,其值在程序执行期间就不会改变。因此,我们可以将变量声明为引用固定值的常量。它也被称为文字。必须使用Const关键字来定义常量。语法C编程语言中使用的常量语法如下-consttypeVariableName;(or)consttype*VariableName;不同类型的常量在C编程语言中使用的不同类型的常量如下所示:整数常量-例如:1,0,34,4567浮点数常量-例如:0.0,156.89,23.456八进制和十六进制常量-例如:十六进制:0x2a,0xaa..八进制

VSCode和VS C++IntelliSense无法工作或拾取库 VSCode和VS C++IntelliSense无法工作或拾取库 Feb 29, 2024 pm 01:28 PM

VS代码和VisualStudioC++IntelliSense可能无法拾取库,尤其是在处理大型项目时。当我们将鼠标悬停在#Include&lt;wx/wx.h&gt;上时,我们看到了错误消息“CannotOpen源文件‘string.h’”(依赖于“wx/wx.h”),有时,自动完成功能无法响应。在这篇文章中,我们将看到如果VSCode和VSC++IntelliSense不能工作或不能提取库,你可以做些什么。为什么我的智能感知不能在C++中工作?处理大文件时,IntelliSense有时

修复Xbox错误代码8C230002 修复Xbox错误代码8C230002 Feb 27, 2024 pm 03:55 PM

您是否由于错误代码8C230002而无法在Xbox上购买或观看内容?一些用户在尝试购买或在其控制台上观看内容时不断收到此错误。抱歉,Xbox服务出现问题。稍后再试.有关此问题的帮助,请访问www.xbox.com/errorhelp。状态代码:8C230002这种错误代码通常是由于暂时的服务器或网络问题引起的。但是,还有可能是由于帐户的隐私设置或家长控制等其他原因,这些可能会阻止您购买或观看特定内容。修复Xbox错误代码8C230002如果您尝试在Xbox控制台上观看或购买内容时收到错误代码8C

递归程序在C++中找到数组的最小和最大元素 递归程序在C++中找到数组的最小和最大元素 Aug 31, 2023 pm 07:37 PM

我们以整数数组Arr[]作为输入。目标是使用递归方法在数组中找到最大和最小的元素。由于我们使用递归,我们将遍历整个数组,直到达到长度=1,然后返回A[0],这形成了基本情况。否则,将当前元素与当前最小或最大值进行比较,并通过递归更新其值以供后续元素使用。让我们看看这个的各种输入输出场景−输入 −Arr={12,67,99,76,32};输出 −数组中的最大值:99解释 &mi

中国东方航空宣布C919客机即将投入实际运营 中国东方航空宣布C919客机即将投入实际运营 May 28, 2023 pm 11:43 PM

5月25日消息,中国东方航空在业绩说明会上披露了关于C919客机的最新进展。据公司表示,与中国商飞签署的C919采购协议已于2021年3月正式生效,其中首架C919飞机已在2022年底交付。预计不久之后,该飞机将正式投入实际运营。东方航空将以上海为主要基地进行C919的商业运营,并计划在2022年和2023年引进总共5架C919客机。公司表示,未来的引进计划将根据实际运营情况和航线网络规划来确定。据小编了解,C919是中国具有完全自主知识产权的全球新一代单通道干线客机,符合国际通行的适航标准。该

C++程序打印数字的螺旋图案 C++程序打印数字的螺旋图案 Sep 05, 2023 pm 06:25 PM

以不同格式显示数字是学习基本编码问题之一。不同的编码概念,如条件语句和循环语句。有不同的程序中,我们使用特殊字符(如星号)来打印三角形或正方形。在本文中,我们将以螺旋形式打印数字,就像C++中的正方形一样。我们将行数n作为输入,然后从左上角开始移向右侧,然后向下,然后向左,然后向上,然后再次向右,以此类推等等。螺旋图案与数字123456724252627282982340414243309223948494431102138474645321120373635343312191817161514

C语言中的void关键字的作用 C语言中的void关键字的作用 Feb 19, 2024 pm 11:33 PM

C中的void是一个特殊的关键字,用来表示空类型,也就是指没有具体类型的数据。在C语言中,void通常用于以下三个方面。函数返回类型为void在C语言中,函数可以有不同的返回类型,例如int、float、char等。然而,如果函数不返回任何值,则可以将返回类型设为void。这意味着函数执行完毕后,并不返回具体的数值。例如:voidhelloWorld()

23 年来首次,C# 获得了 TIOBE 2023 年度编程语言奖 23 年来首次,C# 获得了 TIOBE 2023 年度编程语言奖 Jan 11, 2024 pm 04:45 PM

根据TIOBE编程社区指数,该指数是衡量编程语言受欢迎程度的标准之一,通过收集来自全球工程师、课程、供应商和搜索引擎的数据进行评估。2024年1月TIOBE指数于近日发布,同时官方公布了2023年编程语言排名,C#荣获TIOBE2023年度编程语言,这是23年来C#首次拿下这一荣誉。TIOBE官方新闻稿称,C#已经稳居前10名长达20多年,如今它正在追赶四大语言,成为一年内涨幅最大的编程语言(+1.43%),当之无愧地获得了该奖项。排名第二的是Scratch(+0.83%)和Fortran(+0

See all articles