一,static在类中修饰成员的含义
被修饰的成员:属于类,不再属于对象
普通成员只有在实例化对象时,才会开辟空间,static成员在编译时就有空间
二,static修饰成员变量
1、static修饰的成员只能在类内声明,不能再类内定义。
class Date
{
public:
static int num; !!只能声明,不可以赋值!!
};
int Date::date =10; !!在类外定义!!
2、即便不实例化对象,类外也可以调用此静态函数
void test01()
{
cout<< Date::date ;
}
或者直接赋值(前提:不在private内)
Date::date=200;
3、若实例化多个对象,通过不同对象访问的是同一个静态变量
Date ob1;
Date ob2;
ob1.num=300; !!此时num变为300
cout<<ob2.num ; //编译出同样为300
三,static修饰private成员函数
1 实例化对象访问:
class Date
{
private:
static int num;
public:
int getnum(void)
{
return num;
}
};
int Date::num =10;
必须实例化对象,才能访问
void test01()
{
!!错误!!: cout<<Date::num;
!!错误!!: cout<<Date::getnum();
!!正确!!:
Date ob1;
cout<< ob1.getnum();
注意: 此static变量存在真空期,因为num从一开始就有地址了,但是实例化对象时才开辟
2 直接访问:
只需要在接口函数前也添加static即可:
class Date
{
private:
static int num;
public:
static int getnum(void)
{
return num;
}
};
int Date::num =10;
不实例化对象也可以直接访问:
cout<< Date:getnum();
四,static修饰成员函数
就是3.2的内容。
静态成员函数不能访问非静态成员数据,
所以,static静态成员函数的意义就是:
访问静态成员变量