`
897371388
  • 浏览: 531143 次
文章分类
社区版块
存档分类
最新评论

C++静态成员函数和静态成员变量的探索

 
阅读更多

静态数据成员属于类,非属于类对象,所以,定义位置就有了限制。

静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以在类声明中写成定义是错误的。它也不能在头文件中类声明的外部定义,因为那会造成在多个使用该类的源文件中,对其重复定义。

静态成员函数只能调用静态成员,要调用非静态成员,只能通过类对象,但一般成员函数可以调用静态成员函数。

下面是一个综合性示例,对上面所说都有涉及:

#include <iostream>
#include <string>

using namespace std;

class Student
{
private :
	int _num;
	int _score;
    

public :

	static string _classRoom;  //静态数据成员

	//构造函数
	Student(int num,int score):_num(num),_score(score){}

	//在类内定义和声明函数  输出编号
	void getNum(){
	cout<<"the num is :"<<this->_num<<endl;
	}
	//在类内声明和在类外定义  输出成绩
	void getScore();

	//在类内声明静态函数  输出班级  如果要输出非静态成员需要传递对象 如同这个函数
    static	void getRoom1(Student s);
	//在类内定义静态函数  输出班级  输出静态数据成员 如同此函数
	static void  getRoom2(){
	cout<<"the room is :"<<_classRoom<<endl;
	}
};
//只能在类外对静态数据成员赋值  私有成员也不例外
string Student::_classRoom="计科112班";

//在类外定义的函数 用来输出成绩
void Student::getScore(){
   cout<<"the score is :"<<this->_score<<endl;
}
//输出学生班级
void Student::getRoom1(Student s){
  cout<<"the num   is :"<<s._num<<endl
	  <<"the score is :"<<s._score<<endl
	  <<"the score is :"<<_classRoom<<endl;
}
int main(){
	Student stu(111,98);
	stu.getNum();
	stu.getScore();
	stu.getRoom2();
	Student::_classRoom="计算机专业";
	Student::getRoom1(stu);
    return 0;
}

运行结果:




分享到:
评论

相关推荐

    深度探索C++对象模型 超清版

    Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions...

    深度探索模C++对象模型PDF

    Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions...

    《深度探索C++对象模型》(Stanley B·Lippman[美] 著,侯捷 译)

    Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions...

    在一小时内学会 C#(txt版本)

    4. C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。 数据类型 所有 C# 的类型都是从 object 类继承的。有两种数据类型: 1. 基本/内建类型 2. 用户定义类型 以下是 C# 内建类型的...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    9.6.1 封装C++的成员函数调用 272 9.6.2 常数数量的对象复制 274 9.6.3 对象计数 275 9.6.4 避免重复代码 277 9.6.5 选择最佳的容器 279 9.6.6 延迟运算 281 9.6.7 编译时计算的游戏 283 9.7 小结 286 第10章 调试 ...

    我的编程感悟(中文PDF)(共37M二分卷)分卷一

    9.6.1 封装C++的成员函数调用 272 9.6.2 常数数量的对象复制 274 9.6.3 对象计数 275 9.6.4 避免重复代码 277 9.6.5 选择最佳的容器 279 9.6.6 延迟运算 281 9.6.7 编译时计算的游戏 283 9.7 小结 286 第10章 调试 ...

    深入浅出MFC【侯捷】

    第2章 C++的重要性质 类及其成员——谈封装(encapsulation) 基类与派生类:谈继承(Inheritance) this指针 虚拟函数与多态(Polymorphism) 类与对象大解剖 Object slicing与虚拟函数 静态成员(变量与函数) ...

    深入浅出MFC 2e

    静态成员(变量与函数) C++程序的生与死:兼谈构造函数与解构函数 四种不同的对象生存方式(in stack、in heap、global、local static) 执行期类型信息(RTTI) 动态生成(Dynamic Creation) 异常处理(Exception...

    侯捷- -深入浅出MFC

    静态成员(变量与函数) C++程序的生与死:兼谈构造函数与解构函数 四种不同的对象生存方式(in stack、in heap、global、local static) 执行期类型信息(RTTI) 动态生成(Dynamic Creation) 异常处理(Exception...

    asp.net知识库

    C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件...

Global site tag (gtag.js) - Google Analytics