在 C++ 中,结构体和类都是用来定义自定义类型的数据结构。它们有一些相似之处,但也有一些区别。
内存分配:
在结构体中,所有成员都是公开的,因此它们在内存中是连续分配的。
在类中,成员可以被声明为私有的或保护的,这意味着它们在内存中可能不连续分配。此外,类还可以包含虚函数,这意味着它会有一个虚函数表指针,存储类的虚函数地址。
成员的调用:
在结构体中,可以使用点运算符(.)或箭头运算符(->)访问结构体的成员。例如:
struct Point {
int x;
int y;
};
Point p;
p.x = 10;
p.y = 20;
Point *ptr = &p;
ptr->x = 30;
ptr->y = 40;
在类中,可以使用点运算符(.)或指针箭头运算符(->)访问类的成员。例如:
class Point {
public:
int x;
int y;
};
Point p;
p.x = 10;
p.y = 20;
Point *ptr = &p;
ptr->x = 30;
ptr->y = 40;
在 C++ 中,可以使用 :: 操作符来访问类的 static 变量或 static 方法。例如:
class MyClass {
public:
static int s_value;
static void setValue(int value) { s_value = value; }
static int getValue() { return s_value; }
};
int MyClass::s_value = 0;
int main() {
MyClass::setValue(5);
int x = MyClass::getValue();
std::cout << x << std::endl; // Outputs: 5
return 0;
}
在这个例子中,MyClass 类有一个 static 变量 s_value 和三个 static 方法:setValue、getValue 和构造函数。可以使用 :: 操作符在类的外部调用这些 static 方法,就像在 main 函数中所示。
请注意,static 变量必须在类的外部定义并初始化。在上面的例子中,static 变量 s_value 被定义为 int 类型并初始化为 0。
还要注意,static 方法不能访问类的非 static 成员。例如,如果 MyClass 类有一个非 static 变量 m_value,则在 static 方法中无法访问它。