C++:静态成员变量和静态成员方法

静态成员变量

C++中的静态成员变量是属于类而不是类的实例的变量。这意味着无论创建了多少个类的实例,静态成员变量都只有一个副本,并且可以被所有类的实例共享。

让我们来看一个示例:

class RolePlayer {
public:
    //静态成员变量
    static int roleCount;
    
    RolePlayer()
    {
        //每次对象创建roleCount都进行自加
        roleCount++;
        std::cout << "构造函数" << std::endl;
    }
}

静态成员变量的初始化通常在类的实现文件(.cpp 文件)中进行。这样做确保只有一个实例存在,并且可以在类的范围内进行定义和初始化。以下是一种常见的静态成员变量初始化方法:

//静态成员变量初始化
int RolePlayer::roleCount = 0;
​
int main() {
    RolePlayer roleA;
    RolePlayer roleB;
    RolePlayer roleC;
    
    std::cout << RolePlayer::roleCount << std::endl;
    system("pause");
    return 0;
}

在main函数中创建了三个对象:roleAroleBroleC;这个时候打印静态成员变量的值得到结果:

在这个示例中,RolePlayer::roleCount 是一个静态成员变量,因此它属于整个类而不是类的实例。在类的定义之外,我们对 RolePlayer::roleCount 进行了初始化,并将其设置为 0。

在每个 RolePlayer 对象被创建时,构造函数会自增 RolePlayer::roleCount 的值。最后,我们输出 RolePlayer::roleCount 的值,以查看对象的创建次数。

静态方法

静态成员方法也是属于类而不是类的实例的方法。与静态成员变量类似,静态成员方法可以通过类名直接调用,而不需要创建类的实例。

声明和定义静态成员方法

静态成员方法的声明和定义方式与普通成员方法类似,但在声明和定义时需要在前面加上 static 关键字。例如:

class RolePlayer {
public:
    //静态成员变量    
    static int roleCount;
    
    //静态成员函数
    static void RoleCount()
    {
        roleCount++;
    };
    
    //构造函数(调用静态成员方法)
    RolePlayer()
    {
        RoleCount();
        std::cout << "构造函数" << std::endl;
    };
}
主程序代码:
int main() {
    //创建三个对象
    RolePlayer roleA;
    RolePlayer roleB;
    RolePlayer roleC;
    
    //静态成员方法调用
    RolePlayer::RoleCount();
    
    std::cout << RolePlayer::roleCount << std::endl;
    system("pause");
    return 0;
}

最后输出的结果为:

这段代码定义了一个名为 RolePlayer 的类,其中包含一个静态成员变量 roleCount、一个静态成员方法 RoleCount() 和一个构造函数。

在构造函数中,每次创建 RolePlayer 对象时,都会调用 静态成员方法 RoleCount() ,从而增加 roleCount 的值。因此,每创建一个对象,roleCount 的值就会增加一次。

main() 函数中,创建了三个 RolePlayer 对象 roleAroleBroleC,然后通过类名调用了 RoleCount() 方法。由于 RoleCount() 方法是静态的,所以可以直接通过类名调用,而不需要创建类的实例。

最后,输出了 roleCount 的值。由于创建了三个对象并调用了一次静态成员方法,因此 roleCount 的值应为 4(初始值为0,加上三次构造函数中的调用)。

注意事项

在使用静态成员方法时需要注意以下几点:

  • 静态成员方法只能访问类的静态成员变量和其他静态成员方法,不能访问非静态成员变量和方法。

  • 静态成员方法通常用于执行与类相关的操作,而不需要特定实例的数据。

  • 静态成员方法的调用不依赖于类的实例,可以直接通过类名调用。

总之,静态成员方法是属于类而不是类的实例的方法,它们在类的所有实例之间共享,通常用于执行与类相关的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值