首页后端开发ASP.NETC++类的静态数据成员和静态成员函数

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

时间2024-01-30 23:04:03发布访客分类ASP.NET浏览504
导读:收集整理的这篇文章主要介绍了C++类的静态数据成员和静态成员函数,觉得挺不错的,现在分享给大家,也给大家做个参考。静态数据成员·用关键字static声明·当声明类的数据成员为静态时,无论创建多少个类的对象,静态成员都只有一个副本·在类的所有...
收集整理的这篇文章主要介绍了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++类的静态数据成员和静态成员函数的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: VS2015新建一个完整的c++工程详细...下一篇:C++精选面试题一定要了解猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: C++类的静态数据成员和静态成员函数
本文地址: https://pptw.com/jishu/593156.html
jquery怎么查询有几个数组元素 javascript中的math.random()用法是什么

游客 回复需填写必要信息