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

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成员变量或成员函数来代替。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值