const成员
const成员:被const修饰的成员变量,非静态成员函数
像在平时开发中,可以通过以下的方式来定义成员变量, 并且在需要修改的时候,修改该成员变量的值
class Car {
public:
int m_price;
void run() {
cout << "run()" << endl;
m_price = 10;
}
};
int main() {
Car car;
car.m_price = 20;
getchar();
return 0;
}
但是,如果一旦对成员变量加上const修饰,则可以成为const成员变量,const成员有一个很明显的特点,就是不能修改变量的值。所以当成员变量增加const进行修饰的话,后面修改成员变量地方的代码就会报错。
const成员变量
-
必须初始化(类内部初始化),可以在声明的时候直接初始化赋值。即可以通过这种方式来初始化
class Car { public: const int m_price = 10; void run() { cout << "run()" << endl; } }; -
非static的const成员变量还可以在初始化列表中初始化。所以也可以通过这种方式进行初始化
class Car { public: const int m_price; Car() :m_price(0) { } void run() { cout << "run()" << endl; } };
const成员函数(非静态)
const成员函数有以下特点
-
const关键字写在参数列表后面,函数的声明和实现都必须带const,即可以通过这种方式来定义一个const成员函数
class Car { public: int m_price; void run() const{ cout << "run()" << endl; } }; -
内部不能修改非static成员变量;所以不可以通过这种方式来对非静态成员变量进行修改
class Car { public: int m_price; void run() const{ cout << "run()" << endl; m_price = 0;//这种方式是不允许的 } };除非对成员变量加上static进行修饰。所以这里const的作用是限制了函数内部,不允许修改普通类型的成员变量
-
内部只能调用const成员函数,static成员函数;所以在const修饰的成员函数内部,不允许通过下面的方式来调用函数
class Car { public: int m_price; void run() const{ cout << "run()" << endl; test();//这种调用方式是不允许的 } void test() { } };除非对test函数使用const或者static进行修饰
-
非const成员函数可以调用const成员函数
-
const成员函数和非const成员函数构成重载;即下面两个函数,构成了重载关系
class Car { public: int m_price; void run() const{ cout << "run() const" << endl; } void run() { cout << "run()" << endl; } }; int main() { Car car; car.run(); getchar(); return 0; }
-
非const对象(指针)优先调用非const成员函数
int main() { Car car; car.run();//调用普通的成员函数 const Car car2; car2.run();//调用const修饰的静态成员函数 getchar(); return 0; }如果没有普通的成员函数,这调用const修饰的成员函数
-
const对象(指针)只能调用const成员函数,static成员函数
class Car { public: int m_price; void run() const{ cout << "run() const" << endl; } void run() { cout << "run()" << endl; } static void test() { } }; int main() { Car car; car.run();//调用普通的成员函数 const Car car2; car2.run();//调用const修饰的静态成员函数 car2.test(); getchar(); return 0; }
文章完。












网友评论