static类成员、static类函数
程序员文章站
2024-02-18 15:25:22
...
1.static类成员
1.静态数据成员是一种特殊的数据成员,以关键字static修饰。
2.静态的数据成员在内存中只占一份空间,保存在全局区(静态区),即静态数据成员属于类而不属于对象,为所有实例(对象)共享,当某一个实例(对象)修改了该静态成员变量,其修改值为所有实例(对象)可见。
3.静态的数据成员不占用对象的空间,保存在全局区,所以声明多个对象时,静态的数据成员依然只在全局区保留了一份,不再像其他的数据成员一样占用对象的空间。
4.static成员变量必须在类外面定义,类内仅是声明,且声明必须加static,定义不用加
5.只有在定义对象时,才为对象的数据成员分配空间,但是只要在类中指定了静态数据成员,即使不定义对象,也会为该静态数据成员分配空间。
6.静态数据成员在程序开始时被分配空间,到程序结束时释放,即生命周期是整个工程。
class Date
{
static int count;//静态成员变量
private:
int _year;
int _month;
int _day;
public:
Date()
{
cout << "Date()" << endl;
++count;
}
void Show()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
};
int Date::count=0;//在类外定义,因为静态成员属于类,所以不用调用对象,直接调用类
2.static成员函数
作用:主要用来访问静态数据成员
1.是类的一部分,而不是对象的一部分,和静态数据成员一样。所以静态函数无this指针。
2.无this指针,所以静态成员函数不能访问非static成员变量,只能访问static成员变量
3.公用的成员函数可以引用对象的非静态数据成员,也可以访问类中的静态数据成员
class Date
{
private:
int _year;
int _month;
int _day;
public:
Date()
{
cout << "Date()" << endl;
++count;
}
void Show()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
static void PrintCount()//静态成员函数(无this指针,不属于对象,可以通过类直接调用)所以static不能调用非static成员
{
cout << "PrintCount: " << count << endl;
//cout << _year << endl; //试图访问非static数据成员,error
}
static int count;//静态成员变量
};
int Date::count = 0;
void Test()
{
Date d1, d2;
Date::PrintCount();
}
下一篇: C++深度解析(16)—类的静态成员
推荐阅读
-
C++深度解析(16)—类的静态成员
-
static类成员、static类函数
-
Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket
-
phpmail类发送邮件函数代码_PHP教程
-
浅谈Python类里的__init__方法函数,Python类的构造函数
-
php中static静态类与static 静态变量用法区别
-
抽象成员 抽象类(abstract)、密封类(sealed)
-
C语言-基础入门-学习笔记(8):函数中的变量(auto、static、register、extern)
-
函数(参数传递)、普通/static局部/全局变量、递归
-
php获取、检查类名、函数名、方法名的函数方法,php函数名