静态成员变量和静态成员函数是C++中面向对象编程的一种常见特性。在了解它们之前,我们先简单介绍一下成员变量和成员函数。
成员变量是指声明在类内部的变量,在每个类的对象中都有一份。成员函数也是类的成员,可以访问和修改成员变量,用于实现类的方法和行为。
静态成员变量和静态成员函数都是和类相关联的,而不是和类的每个对象单独相关联的。静态成员变量和静态成员函数可以被类的所有对象和成员函数共享,因此它们的值不取决于类的任何对象。
- 静态成员变量
静态成员变量可以被所有对象共享,仅仅被类本身所拥有。静态变量不属于类对象或实例,而是属于类本身,在程序运行时只有一份内存空间,不会重复为每一个类对象分配空间。静态成员变量必须在类外部进行定义和初始化。
示例代码:
#include <iostream>
using namespace std;
class Student {
public:
Student(string name, int age, float score) {
this->name = name;
this->age = age;
this->score = score;
count++; // 每次构造一个学生对象,总数加1
}
static int count; // 静态成员变量,记录学生总人数
void display() {
cout<<"Name: "<<name<<endl;
cout<<"Age: "<<age<<endl;
cout<<"Score: "<<score<<endl;
}
private:
string name;
int age;
float score;
};
int Student::count = 0; // 静态成员变量在类外进行定义和初始化
int main() {
Student stu1("Tom", 18, 80);
Student stu2("Jerry", 20, 90);
cout<<"Total students: "<<Student::count<<endl; // 使用类名来访问静态成员变量
return 0;
}
在上述代码中,我们定义了一个学生类Student
,该类有三个私有成员变量name
、age
、score
。另外,我们还定义了一个静态成员变量count
,用于记录学生对象的总数。每次我们构造一个学生对象时,都会使得计数器count
的值加1(使用count++
语句),最终我们可以通过使用类名来访问静态成员变量Student::count
,获取学生总数。
- 静态成员函数
静态成员函数没有this指针,不能访问非静态的成员变量和成员函数,只能访问静态的成员变量和成员函数。静态成员函数可以通过类名来直接调用,不需要通过对象来调用。
示例代码:
#include <iostream>
#include <cstring>
using namespace std;
class Person{
public:
Person(char * name, int age) {
strcpy(this->name, name);
this->age = age;
}
void display() { // 非静态成员函数,可以访问所有成员变量和函数
cout<<"Name: "<<name<<endl;
cout<<"Age: "<<age<<endl;
}
static void displayCount() { // 静态成员函数,不能访问非静态的成员变量和成员函数
cout<<"Total persons: "<<count<<endl;
}
private:
char name[20];
int age;
static int count; // 静态成员变量,记录人数
};
int Person::count = 0; // 静态成员变量在类外进行定义和初始化
int main()
{
Person p1("Tom", 18);
Person p2("Jerry", 20);
Person::displayCount(); // 使用类名来访问静态成员函数
return 0;
}
在上述代码中,我们定义了一个人类Person
,该类有两个私有成员变量name
、age
。另外,我们还定义了一个静态成员变量count
,用于记录人数,并且还定义了一个静态成员函数displayCount()
,用以显示人数。在main()
函数中,我们创建了两个人类对象p1
和p2
,并通过使用类名来调用静态成员函数Person::displayCount()
,显示人数。
总结下静态成员变量和静态成员函数:
- 静态成员变量和静态成员函数与类共享,仅仅被类本身所拥有,不需要依赖于具体的类对象。
- 静态成员函数没有
this
指针,不能访问非静态的成员变量和成员函数,只能访问静态的成员变量和成员函数。 - 静态成员变量必须在类外进行定义和初始化,静态成员函数可以用类名直接调用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的静态成员变量和静态成员函数是什么? - Python技术站