C++中静态数据成员使用示例

#include<iostream>//尝试静态数据成员
using namespace std;
class easy {
private:
	int num1;
	int num2;
	static int sum,count;
	static float ave;
public:
	easy(int, int);
	easy(const easy&);//拷贝构造函数,这里要加const,否则使用时会显示没有合适的拷贝构造函数
	void output();
	~easy();
};
easy::easy(int a,int b) :num1(a), num2(b)
{
	sum += num1 + num2;
	count++;
	ave = sum / count;
}
easy::easy(const easy& m ) {
	num1 = m.num1 * 100;
	num2 = m.num2 * 100;
}
void easy::output() {
	cout << "num1=" << num1 << " " << "num2=" << num2 << endl;
	cout << "sum=" << sum << " count=" << count << " ave=" << ave << endl;
    cout << "sum         count         ave" << endl;
	cout << &sum<<"   " << &count <<"   "<< & ave<<endl;//显示地址
}
easy::~easy() {}
int easy::sum = 0;
int easy::count = 0;
float easy::ave = 0.0;
int main()
{
	int A, B, C, D, E, F;
	cin >> A >> B >> C >> D >> E >> F;
	easy PI(A, B);
	easy complex[3]{
		easy(PI),//调用拷贝构造函数
		easy(C,D),
		easy(E,F)
	};//建立了一个有三个无名对象元素的easy类数组
	for (int i = 0; i < 3; i++) {
		complex[i].output();
	}
}

运行代码,输入如下:

1 2 3 4 5 6

来猜猜输出是什么?

结果如下:

1 2 3 4 5 6
num1=100 num2=200
sum=21 count=3 ave=7
sum         count         ave
00F8C46C   00F8C470   00F8C474
num1=3 num2=4
sum=21 count=3 ave=7
sum         count         ave
00F8C46C   00F8C470   00F8C474
num1=5 num2=6
sum=21 count=3 ave=7
sum         count         ave
00F8C46C   00F8C470   00F8C474

该程序调用成员函数output是在声明并初始化了 easy complex[3]之后,也就是说,此时的静态数据成员sum,count,ave已经完成累加,并且每个对象的sum,count,ave占用的是同一块地址,则,每个对象的成员sum,count,ave都相等。

到此这篇关于C++中静态数据成员使用示例的文章就介绍到这了,更多相关C++静态数据成员内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于C++静态数据成员的实现讲解

    静态数据成员是在一个类中用关键字static声明的数据成员.在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享.C和C++的全局变量有一定的局限性,可以任意被修改,也容易和其它的变量名冲突,故在C++中,一般不使用全局变量. 静态数据成员必须进行初始化,初始化应在类体外进行,静态数据成员也可以引用,但不能引用私有数据部分. 接下来看一个例子: #include <iostream> #include <cstring> using namespace std ; c

  • 详解c++ 静态成员变量

    类定义时的静态成员只是声明,静态成员的定义和初始化要在类之外完成 C++的static关键字可修饰类成员变量/方法,表示变量/方法不从属于特定对象,而是属于类的.仔细琢磨静态成员变量,会发现其与C++的方式既相容也矛盾,具有特殊性. 先说相容的一面.·C/C++·有声明和定义的说法:声明给出签名,定义给出具体实现.对类型而言,声明不一定能知道其对象占用空间大小,但根据定义肯定能确定内存占用.说静态成员与C++方式是相容的,因为其初始化方式与方法的定义一致.下面是一个例子: // Foo.hpp

  • 深入解析C++编程中的静态成员函数

    C++静态成员函数 与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加static就成了静态成员函数.如 static int volume( ); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分. 如果要在类外调用公用的静态成员函数,要用类名和域运算符"::".如 Box::volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已. 与静态数据成员不同,静态成

  • C++类静态成员与类静态成员函数详解

    当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关.静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关. 静态数据成员的用途之一是统计有多少个对象实际存在. 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的.也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一

  • C++中静态数据成员使用示例

    #include<iostream>//尝试静态数据成员 using namespace std; class easy { private: int num1; int num2; static int sum,count; static float ave; public: easy(int, int); easy(const easy&);//拷贝构造函数,这里要加const,否则使用时会显示没有合适的拷贝构造函数 void output(); ~easy(); }; easy:

  • c# static 静态数据成员

    ① 静态成员属于类所有,非静态成员属于类的实例所有. ② 每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储: 静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域. 静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都市凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的 ==================================================

  • C++类中的常数据成员与静态数据成员之间的区别

    刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员常数据成员是指在类中定义的不能修改其值的一些数据成员,类似于我们以前学过的常变量,虽然是变量,也有自己的地址,但是一经赋初值,便不能再被修改. 适用于类中定义一些初始化之后不希望被修改的变量. 定义方法: 复制代码 代码如下: const 类型名 变量名; (1)类中的常数据成员只能通过构造函数的参数初始化表进行初始化. (2)常数

  • Java 静态数据初始化的示例代码

    无论创建多少个对象,静态数据都只占用一份存储区域.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值:如果它是一个对象引用,那么它的默认初始值就是null class Bowl { public Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f1(int marker) { Sy

  • Python PyQt5中窗口数据传递的示例详解

    目录 单一窗口数据传递 多窗口数据传递:调用属性 多窗口数据传递:信号与槽 开发应用程序时,若只有一个窗口则只需关心这个窗口里面的各控件之间如何传递数据.如果程序有多个窗口,就要关心不同的窗口之间是如何传递数据. 单一窗口数据传递 对于单一窗口的程序来说,一个控件的变化会影响另一个控件的变化通过信号与槽的机制就可简单解决. import sys from PyQt5.QtWidgets import QWidget, QLCDNumber, QSlider, QVBoxLayout, QAppl

  • Java替换int数组中重复数据的方法示例

    本文实例讲述了Java替换int数组中重复数据的方法.分享给大家供大家参考,具体如下: package test; import java.util.HashSet; public class TestList { /** * 根据传递过来的参数过滤掉重复数据 * @param number:需要过滤掉的数据 * @return:筛选好的新数组 */ public static int[] Filter(int[] number){ HashSet<Integer> hs=new HashSe

  • Vue2 中的数据劫持简写示例

    目录 package.json 相关依赖 Webpack.config.js 配置文件 public/index.html 文件内容 全部文件目录结构 实例一个模拟的 Vue 应用 vue/index.js 文件主要是负责初始化内容 initState方法 核心文件vue/observer.js vue/observer.js文件对数组进行处理 package.json 相关依赖 我们今天要编写的项目通过需要使用 Webpack 进行编译,package.json 相关依赖如下: { "scri

  • JavaScript按日期查询MongoDB中的数据的要点示例

    group by date 聚合查询日期 统计每天数据(信息量) 1 { "_id" : ObjectId("557ac1e2153c43c320393d9d"), "msgType" : "text", "sendTime" : ISODate("2015-06-12T11:26:26.000Z") } 2 { "_id" : ObjectId("557a

  • C++类中的特殊成员函数示例详解

    前言 C++类中有几个特殊的非静态成员函数,当用户未定义这些函数时,编译器将给出默认实现.C++11前有四个特殊函数,C++11引入移动语义特性,增加了两个参数为右值的特殊函数.这六个函数分别是: 1.默认构造函数 默认构造函数指不需要参数就能初始化的构造函数.包含无参和所有参数有默认值两种类型的构造函数. 2.复制构造函数 复制构造函数指使用该类的对象作为参数的构造函数.可以有其他参数,但必须提供默认值. 3.复制赋值运算符 重载等号=,将该类的对象赋值给已定义对象. 4.析构函数 没啥可说的

随机推荐