C++学习笔记----静态成员和静态成员函数(static)

本文详细介绍了C++中静态成员变量和函数的概念及使用。静态成员属于类本身,而非类的实例,它们被所有对象共享。文章通过实例展示了静态成员的声明、初始化和使用,强调了静态成员不能在构造函数中初始化,并指出静态成员函数无法访问非静态成员。
摘要由CSDN通过智能技术生成

static

我们在成员函数或者成员变量的前面加上static 关键字便是该成员和类直接相关,也就是说该成员不属于任何一个对象,而是该成员被该类的所有对象所共享。
例子:

#include <iostream>
#include<string>
using namespace std;
class test {
public:
    test() { 
        count++;
        cout << "第" << count << "个test类对象" << endl;
    };
private:
    static int count;
};
int test::count = 0;
int main()
{
    test t1;
    test t2;
    test t3;
    test t4;
    return 0;
}

运行结果
在这里插入图片描述
count为test类的静态成员,只要类的其中一个对象修改count,那么其他所有该类的的count也就被修改了,因为所有test类的对象是共享static成员的。静态成员变量的属性有点类似于全局变量。

静态成员变量的声名和实现

静态成员变量
静态成员变量的声名应该在类的内部声名,在类的外部实现,静态成员变量的形式static type var比如:

static int count;

静态成员函数在类外实现,如下:

int test::count = 0;

静态成员变量在类外实现时不用在加上static,静态成员变量不能在构造函数中进行初始化,因为静态成员变量只能初始化一次,如果在构造函数中初始化则会没实例化一个对象就会初始化一次。

静态成员函数
静态成员函数和静态成员变量相同,不会被某一个对象所拥有,为所有对象所共享。在静态成员函数中不能包含this指针,也就是说我们不能通过静态成员函数访问普通成员。静态成员函数是只能修改静态数据。

class test {
public: 
   static void fun() {
        cout << i << endl;//错误,访问i的形式实际为this->i的省略
        cout << count << endl;//正确,因为count为静态变量
    }

private:
    static int count;
    int i;
};

同样,在类外部实现一个静态成员函数也是不需要加static关键字的。

void  test::fun() {

    cout << i << endl;
    cout << count << endl;
}

静态成员函数和静态成员变量的使用
静态成员函数和静态成员变量的使用可以不用实例化对象,直接使用类名::成员变量名访问即可

cout<<test::count<<endl;//直接使用count变量
test::fun()//直接调用fun函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值