C++ static详解
一、static
static
是 C++ 中的关键字,用于表示静态的意思。它可以修饰类的成员变量和成员函数,以及全局变量和函数,具体用法如下:
1.1 类的静态成员变量
类的静态成员变量是指在类中声明的以 static
关键字开头的成员变量。它是归属于类的,而不是归属于类的对象。因此,在创建类的对象时,并没有为静态成员变量分配存储空间,而是在程序编译时就已经把它的空间分配好了,所有的对象共享同一块空间。静态成员变量可以通过类名直接访问。
#include <iostream>
using namespace std;
class Box {
public:
static int count; // 静态成员变量
Box(double l = 2.0, double b = 2.0, double h = 2.0) {
cout << "Constructor called." << endl;
length = l;
breadth = b;
height = h;
count++; // 静态成员变量自增
}
double Volume() {
return length * breadth * height;
}
private:
double length;
double breadth;
double height;
};
int Box::count = 0; // 静态成员变量初始化
int main() {
Box box1(3.3, 1.2, 1.5);
Box box2(8.5, 6.0, 2.0);
cout << "Total objects: " << Box::count << endl; // 直接访问静态成员变量
return 0;
}
输出:
Constructor called.
Constructor called.
Total objects: 2
1.2 类的静态成员函数
类的静态成员函数是指在类中声明的以 static
关键字开头的成员函数。它同样是归属于类的,而不是归属于类的对象。因此,它没有 this
指针,这意味着它无法访问非静态成员变量和非静态成员函数。可以通过类名直接调用静态成员函数。
#include <iostream>
using namespace std;
class Box {
public:
static int count; // 静态成员变量
Box(double l = 2.0, double b = 2.0, double h = 2.0) {
cout << "Constructor called." << endl;
length = l;
breadth = b;
height = h;
count++; // 静态成员变量自增
}
double Volume() {
return length * breadth * height;
}
static int getCount() {
return count;
}
private:
double length;
double breadth;
double height;
};
int Box::count = 0; // 静态成员变量初始化
int main() {
Box box1(3.3, 1.2, 1.5);
Box box2(8.5, 6.0, 2.0);
cout << "Total objects: " << Box::getCount() << endl; // 直接调用静态成员函数
return 0;
}
输出:
Constructor called.
Constructor called.
Total objects: 2
1.3 全局变量和函数的静态
在全局变量和函数中使用 static
关键字,则它们的作用域被限制在声明所在的文件中,不能被其他文件所访问。
// file1.cpp
#include <iostream>
using namespace std;
static int count; // 静态全局变量
static void printCount() { // 静态全局函数
cout << "Count: " << count << endl;
}
int main() {
count = 5; // 静态全局变量赋值
printCount(); // 直接调用静态全局函数
return 0;
}
输出:
Count: 5
二、static与const
在 C++ 中,static
也可以用于修饰 const
类型的变量。这种修饰主要用于在头文件中定义常量,防止在多个文件中重复定义。
// constants.h
static const int MAX = 100; // 常量定义
// file1.cpp
#include "constants.h"
#include <iostream>
using namespace std;
int main() {
cout << MAX << endl; // 直接访问常量
return 0;
}
// file2.cpp
#include "constants.h"
#include <iostream>
using namespace std;
int main() {
cout << MAX << endl; // 直接访问常量
return 0;
}
输出:
100
100
三、总结
本文介绍了 C++ 中 static
关键字的用法。它可以用于修饰类的成员变量和成员函数、全局变量和函数,以及 const
类型的常量。要注意的是,静态成员变量和静态成员函数归属于类,而不是对象,因此可以通过类名直接访问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ static详解,类中的static用法说明 - Python技术站