C++ 类的成员变量是类的一部分,用于存储类的状态或属性。成员变量可以是不同的数据类型,并且可以具有不同的访问权限。C++ 提供了多种类型的成员变量,包括普通成员变量、静态成员变量、常量成员变量、可变成员变量(mutable)和引用成员变量。下面详细介绍这些成员变量及其用法。
- 普通成员变量
普通成员变量是最常见的成员变量类型,用于存储对象的属性。每个对象都有自己独立的一份普通成员变量。
示例
#include <iostream>
class MyClass {
public:
int value;
MyClass(int val) : value(val) {}
};
int main() {
MyClass obj1(10);
MyClass obj2(20);
std::cout << "obj1.value = " << obj1.value << std::endl;
std::cout << "obj2.value = " << obj2.value << std::endl;
return 0;
}
- 静态成员变量
静态成员变量属于类而不是类的对象。所有对象共享同一个静态成员变量。静态成员变量在类的外部初始化。
示例
#include <iostream>
class MyClass {
public:
static int staticValue;
MyClass() {}
};
// 静态成员变量初始化
int MyClass::staticValue = 0;
int main() {
MyClass obj1;
MyClass obj2;
MyClass::staticValue = 100;
std::cout << "obj1.staticValue = " << obj1.staticValue << std::endl;
std::cout << "obj2.staticValue = " << obj2.staticValue << std::endl;
return 0;
}
- 常量成员变量
常量成员变量在对象的生命周期内不能被修改。常量成员变量必须在初始化列表中进行初始化。
示例
#include <iostream>
class MyClass {
public:
const int value;
MyClass(int val) : value(val) {}
};
int main() {
MyClass obj(10);
std::cout << "obj.value = " << obj.value << std::endl;
return 0;
}
- 可变成员变量(mutable)
可变成员变量允许在常量成员函数中被修改。mutable 关键字用于声明可变成员变量。
示例
#include <iostream>
class MyClass {
public:
mutable int mutableValue;
MyClass(int val) : mutableValue(val) {}
void modifyValue() const {
mutableValue = 100; // 在const成员函数中修改可变成员变量
}
};
int main() {
MyClass obj(10);
std::cout << "Before: " << obj.mutableValue << std::endl;
obj.modifyValue();
std::cout << "After: " << obj.mutableValue << std::endl;
return 0;
}
- 引用成员变量
引用成员变量是指向其他变量的引用。引用成员变量必须在初始化列表中初始化,并且一旦绑定后不能再绑定到其他变量。
示例
#include <iostream>
class MyClass {
public:
int& refValue;
MyClass(int& val) : refValue(val) {}
};
int main() {
int x = 10;
MyClass obj(x);
std::cout << "obj.refValue = " << obj.refValue << std::endl;
x = 20;
std::cout << "After modifying x: obj.refValue = " << obj.refValue << std::endl;
return 0;
}
- 私有成员变量
私有成员变量只能在类的内部访问,不能在类的外部直接访问。通常通过公共成员函数访问私有成员变量。
示例
#include <iostream>
class MyClass {
private:
int privateValue;
public:
MyClass(int val) : privateValue(val) {}
int getValue() const {
return privateValue;
}
void setValue(int val) {
privateValue = val;
}
};
int main() {
MyClass obj(10);
std::cout << "Private value: " << obj.getValue() << std::endl;
obj.setValue(20);
std::cout << "Updated private value: " << obj.getValue() << std::endl;
return 0;
}
- 保护成员变量
保护成员变量在类的外部不可访问,但可以在派生类中访问。
示例
#include <iostream>
class Base {
protected:
int protectedValue;
public:
Base(int val) : protectedValue(val) {}
};
class Derived : public Base {
public:
Derived(int val) : Base(val) {}
void showValue() const {
std::cout << "Protected value: " << protectedValue << std::endl;
}
};
int main() {
Derived obj(10);
obj.showValue();
return 0;
}
总结
C++ 类的成员变量种类多样,可以根据需要选择合适的类型来存储和管理数据:
普通成员变量:每个对象有自己独立的成员变量。
静态成员变量:属于类,所有对象共享同一个变量。
常量成员变量:在对象生命周期内不能修改。
可变成员变量:允许在常量成员函数中修改。
引用成员变量:指向其他变量的引用,必须在初始化列表中初始化。
私有成员变量:只能在类内部访问,通常通过公共成员函数访问。
保护成员变量:在类外部不可访问,但在派生类中可以访问。
理解和使用这些成员变量类型,可以帮助开发者更好地设计和实现类及其行为,确保数据的封装和安全性。