static类成员

本文详细介绍了C++中静态成员的概念及使用方法,包括静态数据成员和静态成员函数的特点、定义及初始化方式,并解释了它们如何与类而非特定对象关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 通常,非static数据成员存在于类类型的每个对象中。而static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,而不是与该类的对象相关联。

2. 类可以定义共享的static数据成员,类也可以定义static成员函数。static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接访问使用非static成员。

3. 定义static成员:加上关键字static将成员设为static。static成员遵循正常的公有/私有访问规则。

4. 使用类的static成员:

    通过作用域操作符从类直接调用static成员,或者通过对象、引用或指向该类类型对象的指针间接调用。

    类成员函数可以不用作用域操作符来引用类的static成员。

5. static成员函数:

    当我们在类的外部定义(定义,而不是声明)static成员时,无须重复指定static保留字,该保留字只出现在类定义体内部的声明处。

    static成员函数不能被声明为const。毕竟,将成员函数声明为const就是承诺不会修改该函数所属的对象。

    static成员函数不能被声明为虚函数。

6. static数据成员:

    static数据成员必须在类定义体的外部定义(正好一次),不像普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化(通常将static数据成员的定义放在包含类的非内联成员函数定义的文件中)。

   一般而言,类的static成员不能在类的定义体初始化,而是在定义时才初始化。但只要初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化(但是,该数据成员仍必须在类的定义体之外进行定义,(**实际测试表明,不需要在定义体之外再次定义**))。

staticTest.h

#ifndef STATIC_TEST_H
#define STATIC_TEST_H

class StaticTest
{
public:
private:
    static void AddCount(void);

    static StaticTest stest;                    // ok
    StaticTest  *mem2;
    // SatatcTest  mem3;                        // error: 不能是类类型,只能是自身类型的对象或引用
    static const int m_IntConst = 10;
    static int s_Count;
    // static const double m_DoubleConst = 1.0; // error: 不是整型
    static double m_DoubleConst2;

};
#endif


staticTest.cpp:

#include "staticTest.h"

const int StaticTest::m_IntConst;

int StaticTest::s_Count = 0;
double StaticTest::m_DoubleConst2 = 1.0;

void StaticTest::AddCount(void)
{
    s_Count++;    
}


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值