静态数据成员是在一个类中用关键字static声明的数据成员。在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享。C和C++的全局变量有一定的局限性,可以任意被修改,也容易和其它的变量名冲突,故在C++中,一般不使用全局变量。

静态数据成员必须进行初始化,初始化应在类体外进行,静态数据成员也可以引用,但不能引用私有数据部分。

接下来看一个例子:

#include <iostream>
#include <cstring>
using namespace std ;
class Student
{
	private :
		//静态成员变量
		static int age ;
		static float score ;
		string name ;
	public :
		static int x , y ;
		//构造函数
		Student();
		//析构函数
		~Student();
		//设置信息
		int setstuinfo(int age , float score , string name);
		//打印信息
		int Printstuinfo();
};

//静态成员必须初始化
int Student::age = 24 ;
float Student::score = 86.6 ;
int Student::x = 100 ;
int Student::y = 200 ;

Student::Student()
{
	this->name = "YYX" ;
	cout << this->name << endl ;
	cout << this->age << endl ;
	cout << this->score << endl ;
}
Student::~Student()
{
	this->name = "NULL";
	cout << this->name << endl ;
}
int Student::setstuinfo(int age , float score , string name)
{
	this->age = age ;
	this->score = score ;
	this->name = name ;
}

int Student::Printstuinfo()
{
	cout << this->name << endl ;
	cout << this->age << endl ;
	cout << this->score << endl ;
}

int main(void)
{
	Student stu1 ;
	//指针
	Student *p ;
	p = &stu1 ;
	p->setstuinfo(25,96,"XXX");
	p->Printstuinfo();
	//静态成员的引用---->不可以引用私有成员
	cout << p->x << endl ;
	cout << p->y << endl ;
	Student::x = 80 ;
	Student::y = 90 ;
	cout << p->x << endl ;
	cout << p->y << endl ;
	return 0 ;
}

运行结果:

YYX

24

86.6

XXX

25

96

100

200

80

90

NULL

C++静态数据成员实现的更多相关文章

  1. 静态数据成员(面向对象的static关键字)

    静态数据成员: 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.先举一个静态数据成员的例子. #include<iostream> using namesp ...

  2. 转:C语言中的static变量和C++静态数据成员(static member)

    转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量        a.静态局部变量在函数内定义,生存期为整个程序 ...

  3. C++中静态数据成员

    类的静态成员不能由类的构造函数来初始化.因为即使不存在类的任何对象时,类的静态成员依然存在并且可以被使用.类的静态成员也不能访问任何类的非静态成员. 类名和类对象都可以直接调用静态数据成员.因为静态数 ...

  4. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

  5. C++类静态数据成员与类静态成员函数

    from:://http://blog.csdn.net/taina2008/article/details/1684834 把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实 ...

  6. C++静态数据成员与静态成员函数

    一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享. 可以使用全 ...

  7. C++ 静态数据成员和静态成员函数

    一 静态数据成员: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中,因为这样做会引起重复定义这样的错误.即使加上#ifndef ...

  8. C++中static修饰的静态成员函数、静态数据成员

    1.静态成员函数.静态数据成员 在类中,用static修饰的成员函数被称为静态成员函数,而用static修饰的数据成员就称为静态数据成员:与普通的成员函数和数据成员不同, 静态成员函数和静态数据成员有 ...

  9. C++类中的常数据成员和静态数据成员的区别

    刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员 常数据成员是指在类中定义的不能修 ...

随机推荐

  1. LeetCode:N叉树的后序遍历【590】

    LeetCode:N叉树的后序遍历[590] 题目描述 给定一个 N 叉树,返回其节点值的后序遍历. 例如,给定一个 3叉树 : 返回其后序遍历: [5,6,3,2,4,1]. 题目分析 这道题有好几 ...

  2. directorjs和requirejs和artTemplate模板引擒建立的SPA框架

    分为4块:A : index.html壳子.    加载B  init-config.js,   加载D  header.html模板B : init-config.js 个人信息+路由配置+权限+渲 ...

  3. maven的相关命令

    maven的相关命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码(编译到target文件夹中) mvn test-compile :编译测 ...

  4. PAT 天梯赛 L1-036. A乘以B 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-036 AC代码 #include <iostream> #include <cstdio&g ...

  5. C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)

    转自:http://www.kuqin.com/language/20090806/66164.html 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器 ...

  6. CSS 边距和填充

    margin and padding are the two most commonly used properties for spacing-out elements. A margin is t ...

  7. 【BZOJ4671】(斯特林反演)

    题目 [BZOJ4671]异或图 很有意思的题 做法 直接处理显然很难,我们考虑范围扩大以求容斥或反演这类的帮助 \(f_i\)表示至少有\(i\)个联通块的方案,形如设立\(i\)个联通块轮廓,联通 ...

  8. 如何自定义echarts 线性图的选择事件

    最近在做公司的数据大盘,要用到图表显示,echarts研二的时候有用过,我就决定用它了. 这里用到一个可以同时显示多条曲线的line-charts,基本样子如下: 看到这个画红色圈圈的地方了吗??? ...

  9. oracle时间的获取,前一天,上一个星期,上一个月

    –前一天的开始时刻 SELECT to_date(to_char(TRUNC(SYSDATE-1),’yyyy-mm-dd’) || ‘00:00:00’,’yyyy-mm-dd hh24:mi:ss ...

  10. spring security结合数据库验证用户-XML配置方式

    之前的用户信息我们都是使用的内存用户,测试例子可以,实际中使用肯定不行,需要结合数据库进行验证用户.这就是本节的重点: 项目目录如下:  在之前的项目中的依赖中添加两个依赖: <dependen ...