一.const修饰成员变量
- const修饰成员变量,必须初始化;
- const修饰成员变量,只能通过构造函数方法一(初始化列表),进行初始化。不能通过构造函数方法二初始化;
- const修饰成员变量,除了定义时初始化和构造函数方法一初始化之外,不能再其他地方进行初始化;
初始化列表:在变量定义时被调用,给变量赋值。
class Person {
public:
const int age=1;//修饰成员变量
Person(int age):age(age){}//方法一 初始化列表 不报错!
Person(int age){//方法二 报错!
this->age = age;
}
};
int main(void) {
Person p1(10);
p1.age = 11;//报错!
}
结果:
二.const修饰成员函数
不能在const修饰的成员函数内改变成员变量的值。
class Person {
public:
int age;
Person(int age):age(age){}
void getAge01() const//修饰成员函数
{
this->age = 11;//会报错
}
void getAge02()
{
this->age = 11;//不会报错
}
};
结果:
三.const与引用&
const修饰的成员参数,一般与引用搭配,无法修改成员参数的值
class Person {
public:
int age;
Person(int age):age(age){}
void getAge(const int &a) {
this->age = a;
}
};
四.this与static
static函数只能返回static变量。
原因:static返回的是静态区数据,而ma是内存中数据。
问题:
常量数据成员和静态常量数据成员有什么区别?如何初始化常量数据成员?如何初始化静态常量数据成员?
【解】常量的数据成员指得是那些在对象生成时给定了初值,在整个对象的生命周期中,该数据成员的值是不能变的。常量数据成员的值必须在构造函数的初始化列表中进行初始化。静态的常量数据成员是整个类所有对象共享的一个常量。对整个类而言,不管定义了多少个对象,该成员永远只有一份拷贝。静态常量数据成员的值是在定义类时给定。