您的位置:首页 > 编程语言 > C语言/C++

C++类中的static成员学习总结

2017-04-30 21:00 239 查看
C++类中的static成员学习总结

前提

        C++类背后蕴含数据抽象和封装思想。数据抽象是一种依赖于接口和实现分离的编程技术。封装是一项将低层次的元素组合起来形成的新的、高层次实体。

        对于类而言C++的全局对象会破坏封装:全局对象需要支持特定类的抽象的实现。因为C++类是数据抽象和封装的结果,在定义类的时候只是类成员的声明没有实现。如果某个类的全体对象需要访问一个全局对象,在定义类的时候就需要进行初始化且能够被随意的调用。因此,如果有某个类的全体对象需要访问一个全局对象的需求时,应该在类中定义static成员来代替全局对象。

 

类的static成员的优点

       1)static成员的名字是在类的作用域中。可以避免与其他类的成员或全局对象名字冲突。

       2)可以实施封装。static成员可以是私有成员,而全局对象不可以。

       3)static成员与特定的类是关联的。提高了程序的可读性。

 

static成员函数

        static成员函数不是任何对象的组成部分。因此static成员函数没有this指针。static成员函数不能使用const声明。因为const的作用就是承诺不修改该函数的所属对象。static成员函数不能被声明为虚函数。

static成员变量

        static数据成员可以声明为任意类型。但是static数据成员必须在类定义体的外部定义。static成员不是通过类构造函数进行初始化,应该在定义时进行初始化。

        const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。

 

访问static成员

        static成员遵循正常的公有/私有访问规则。

/*
fileName:staticTest.h
*/
#ifndef TEST
#define TEST
#include <iostream>

using namespace std;

class StaticClass{

public:
int retValue(){
return value;
}

char retChar(){
return str;
}

void setValue( int a){
value = a ;
}
private:
//声明一个static int 变量。
static int value;
//声明一个const static char 变量。并用'c'对变量进行了初始化。
const static char str='c';
};

#endif

/*
fileName:staticTest.cpp
*/
#include "staticTest.h"
//定义static int value
int StaticClass::value = 1;
//定义 const static char str
const char StaticClass::str ;
/*
fileName:main.cpp
*/
#include "staticTest.h"
int main(){
StaticClass a;

a.setValue(100);
cout<<a.retValue()<<endl;
cout<<a.retChar()<<endl;
}


编译与运行:
[root@localhost class]# g++ -c staticTest.cpp

[root@localhost class]# g++ -c main.cpp

[root@localhost class]# g++ -o test main.o staticTest.o

[root@localhost class]# ./test

100

c

总结

        如果一个类需要访问一个全局对象,可以使用static成员变量或成员函数来代替。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++