今天我们来学习一下C++中的静态成员数据与函数——这一部分主要服务于不同对象间实现数据共享。
1. 静态数据成员
- 定义:静态数据成员是属于类本身而非类的对象的。这意味着无论创建多少个类的对象,都只有一个静态数据成员的副本。
- 声明:在类定义中,使用
static
关键字声明静态数据成员。 - 初始化:静态数据成员必须在类外部进行初始化。这通常在类的实现文件(.cpp)中进行。
- 访问:可以通过类的对象或类名本身来访问静态数据成员。
#include <bits/stdc++.h>
class MyClass {
public:
static int count; // 声明静态数据成员
MyClass() {
count++; // 构造函数中增加计数
}
};
int MyClass::count = 0; // 初始化静态数据成员
int main() {
MyClass obj1;
MyClass obj2;
MyClass obj3;
std::cout << MyClass::count; // 输出3
return 0;
}
要特别注意的是公用的静态数据成员可以初始化,但只能在类外进行初始化
int MyClass::count = 0;
下面给出一段关于静态成员数据的代码示例code:
#include <bits/stdc++.h>
using namespace std;
class Box
{
public:
Box(int , int );
int volume();
//private:
static int height;
int width;
int length;
} ;
Box::Box(int w, int len)
{
width = w;
length = len ;
}
int Box::volume()
{
return (height * width * length);
}
int Box::height = 10;
int main()
{
Box a(15,20),b(20,30);
cout<<a.height<<endl;
cout<<b.height<<endl;
cout<<Box::height<<endl;
cout<<a.volume()<<endl;
return 0;
}
#include <bits/stdc++.h>
class MyClass {
public:
static int count;
MyClass() {
count++;
}
static void printCount() { // 声明静态成员函数
std::cout << "Count: " << count << std::endl;
}
};
int MyClass::count = 0;
int main() {
MyClass obj1;
MyClass obj2;
MyClass::printCount(); // 输出Count: 2
return 0;
}
2. 静态成员函数
- 定义:静态成员函数是类的函数,但它不依赖于类的任何特定对象。静态成员函数只能访问静态数据成员和其他静态成员函数。
- 声明:在类定义中,使用
static
关键字声明静态成员函数。 - 调用:可以通过类的对象或类名本身来调用静态成员函数。
同样的我们在类内也可定义一个静态成员函数来访问静态成员数据如:
static void printCount() { // 声明静态成员函数
std::cout << "Count: " << count << std::endl;
}
注意事项
- 静态成员变量是类所有对象共享的,不占用对象的内存空间。
- 静态成员函数不能访问类的非静态成员变量,因为非静态成员变量依赖于类的对象。
- 静态成员在类外定义和初始化,并且初始化时不加任何修饰符,如
static
。