? 静态成员变量
静态成员变量是类共享变量,所有类对象都可以访问,不属于某个特定对象,访问时通过类作用域来访问
class Code {
public:
static int value;
};
//静态成员变量必须在类声明块之外初始化
int Code::value = 0;
int main() {
Code c1;
c1.value++;
Code::value++;
cout << Code::value << endl;
return 0;
}
? 静态成员函数
静态成员函数和静态成员变量的原理是一样的,由于静态成员函数属于类,而不属于某个具体类对象,所以不能将其声明为const成员函数
class Code {
public:
static int value;
static int getValue() {
return value++;
};
};
int Code::value = 0;
int main() {
cout << Code::getValue() << endl;
cout << Code::getValue() << endl;
return 0;
}
? 使用类对象作为成员变量
和基本类型的成员变量一样,类类型的对象也可以作为成员变量,这一点很好理解
这里我们主要提一下,当类对象作为成员变量时,我们可以通过控制const属性来禁用它的某些操作
class Value {
private:
int value = 0;
public:
int operator++(){
return ++value;
}
};
class Object {
private:
Value value;
public:
const Value& getValue(){
return value;
}
};
int main(){
//普通的Value对象
//可以使用自增运算来改变value的值
Value v;
++v;
//使用Value对象作为成员变量
//由于getValue返回了一个Value常量,只能调用const成员函数,因此自增运算无法使用
//通过这种方式,Object禁用了Value的自增操作,保证了Value的值不被修改
Object o;
const Value& value = o.getValue();
++value; //无法通过编译,因为value是常量,而自增运算不是const函数
return 0;
}