C++ 类中static浅解

C++ 类中static浅解

1.C++类成员变量为static

如果c++类的成员变量为staic,该静态成员变量已经进行了声明,该静态变量的定义最好在*.cpp进行定义,在头文件(*.h)中定义不是不行,如果包含该头文件的就只有一个文件的话,那是没有问题,例如,在A.h声明了一个static变量,然后同样在这个文件中对这个静态变量进行了定义,然后再任何的实现文件(*.cpp)中只有一个文件写成#includeA.h,那是没有问题,像在A.h中的一个类中声明了的一个静态成员变量,然后再类外定义了该变量,然后实现文件为main.cpp,那样的话,就不会重复定义的问题。

如果静态变量的声明和定义都是在一个文件中如果包含这个头文件,出现两次,那么编译器会报重复定义的错误。

具体的定义的方法是, 变量类型(前面不用加static)类名::变量名=类型值;

2.c++类成员函数声明成static

书上说,静态成员函数,不能访问非静态成员变量,不能调用非静态成员函数,这是为什么呢?主要的原因是理解编译器对c++中静态成员变量和静态成员函数,和非静态的是区分对待的。你可以这样理解,对于静态的变量和函数,vs在编译阶段就对静态的成员变量进行了内存分配,是时时在在存在的,而对于不是静态的话,只有在类的对象创建的时候才进行内存分配。这样就形成很大的区别,简单的说,在编译阶段类中,实际有的东西,只有静态变量,静态函数,其他的都可以认为是不存在的。这样理解的话,就能理解,为什么静态成员函数,不能访问非静态成员变量,因为在编译的时候,这些非静态成员变量是没有的。

另外为什么静态成员函数,不能访问非静态成员函数,原因有两点,一是上面提到的,有可能出现访问非静态成员变量的可能,另外一种是,c++的隐含的this指针,静态成员函数是没有这个默认参数的,只有非静态的成员函数才有。所以当静态成员函数调用非静态成员函数时,当非静态成员函数,需要参数this指针的时候,静态成员函数,没法提供。所以静态成员函数,不能访问非静态成员函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值