我是靠谱客的博主 超级烤鸡,最近开发中收集的这篇文章主要介绍C++对对象个数进行计数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

//利用静态数据成员的数据共享这个性质
class Widget {
public:
    Widget() { ++count; }
    Widget(const Count&) { ++count; }
    ~Widget() { --count; }
    
    static size_t getCount() { return count; }

private:
    static size_t count;
};

//然后在main外写上
size_t Widget::count = 0;

//在main里写上
cout << Cylinder::getCount();

以圆柱体的类生产对象为例

 

//Cylinder.h
#include <iostream>
using namespace std;
#define PI 3.1415926
class Cylinder
{
public:
	static int obj_count;
	double radius;
	double height;
	Cylinder(double r, double h);
	Cylinder(const Cylinder& a);
	~Cylinder();
	double Get_Volume();
	double Get_Surface();
	static int get_num_of_objects(){return obj_count;}

};

//定义构造函数
Cylinder ::Cylinder(double r, double h) {radius = r; height = h; obj_count++;}
//定义拷贝构造函数
Cylinder ::Cylinder(const Cylinder& a)
{
	radius = a.radius;
	height = a.height;
	obj_count++;
}
//定义析构函数
Cylinder ::~Cylinder() {obj_count--;}
//求体积
double Cylinder ::Get_Volume()
{
	return PI * radius * radius * height;
}

//求表面积
double Cylinder ::Get_Surface()
{
	return (PI * radius * radius * 2) + (2 * PI * radius * height);
}

void display(Cylinder c) {
	cout << "n第" << Cylinder::obj_count-1 <<"个:"<< endl;
	cout << "半径为" << c.radius << endl;
	cout << "高为" << c.height << endl;
	cout << "体积为" << c.Get_Volume() << endl;
	cout << "表面积为" << c.Get_Surface() << endl;
}

int Cylinder::obj_count=0;
//main.cpp
#include <iostream>
#include "Cylinder.h"
using namespace std;


int main() {
	Cylinder c1(2, 3);
	display(c1);
	Cylinder c2 = c1;
	display(c2);
	Cylinder c3(4, 5);
	display(c3);
	c3.~Cylinder();
	cout<<"n类的个数为:"<<Cylinder::get_num_of_objects();
	return 0;
}

输出为2,3-1得到的

 

有两个困惑:

1、初始化和输出obj_count都放main里会报错“definition or redeclaration of 'obj_count' not allowed inside a function”

2、第一次调用一个类会计数变为2?之后都还是加一。。我写的是Cylinder::obj_count-1所以“看起来”没问题

最后

以上就是超级烤鸡为你收集整理的C++对对象个数进行计数的全部内容,希望文章能够帮你解决C++对对象个数进行计数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部