const成员 和 引用类型成员
1.定义
定义:被 const 修饰的成员
被const修饰的成员变量、非静态成员函数
2.const 成员变量
必须初始化(类内部初始化),可以在声明的时候直接初始化赋值
非static的const成员变量还可以在初始化列表中初始化
class Car {
public:
// 两种赋值方法:
// 在声明的时候直接初始化赋值
const int m_price;
// 在初始化列表中初始化
Car() :m_price(0) {
}
};
3.const成员函数(非静态)
1.const关键字写在参数列表后面,函数的声明和实现都必须带const
2.内部不能修改非static成员变量
3.内部只能调用const成员函数、 static成员函数
4.非const成员函数可以调用const成员函数
5.const成员函数和非const成员函数构成重载
6.非const对象(指针)优先调用非const成员函数
7.const对象(指针)只能调用const成员函数、 static成员函数
class Car {
public:
// const int m_price;
// Car() :m_price(0) {}
int m_price;
void run() const {
cout << "run() const" << endl;
}
/*void run() {
cout << "run()" << endl;
}*/
};
- 内部只能调用const成员函数、 static成员函数
下面错误示例:在run() const中调用成员函数 test(),编译器报错
class Car {
public:
// const int m_price;
// Car() :m_price(0) {}
int m_price;
void run() const {
cout << "run() const" << endl;
// 无法调用
test();
}
void test() {
}
};
- const成员函数和非const成员函数构成重载
下面的 run() 和 run() const 可以构成重载
class Car {
public:
// const int m_price;
// Car() :m_price(0) {}
int m_price;
void run() const {
cout << "run() const" << endl;
}
void run() {
cout << "run()" << endl;
}
};
调用方式:用普通对象调用,调用的是 run();
用 const 创建对象,调用的是 run() const。
int main() {
Car car;
car.run();
const Car car2;
car2.run();
getchar();
return 0;
}
p.s:const 成员函数 和 普通成员函数 的区别就是函数内部的成员变量是否可以修改。
4.引用类型成员
引用类型成员变量必须初始化(不考虑static情况)
在声明的时候直接初始化
通过初始化列表初始化
class Car {
int age;
int &m_price = age;
public:
Car(int &price) : m_price(price){
}
};