温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-09-06 14:42:27 来源:亿速云 阅读:194 作者:小新 栏目:编程语言

这篇文章主要为大家展示了“C++类的静态数据成员和静态成员函数怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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++类的静态数据成员和静态成员函数怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI