我对常量对象有疑问。在以下程序中:
class const_check{
int a;
public:
const_check(int i);
void print() const;
void print2();
};
const_check::const_check(int i):a(i) {}
void const_check::print() const {
int a=19;
cout<<"The value in a is:"<<a;
}
void const_check::print2() {
int a=10;
cout<<"The value in a is:"<<a;
}
int main(){
const_check b(5);
const const_check c(6);
b.print2();
c.print();
}
void print()
是类const_check
的常量成员函数,因此根据常量的定义,任何更改int a
的尝试都会导致错误,但程序运行正常我。我想我在这里有些困惑,有人能告诉我为什么编译器没有将它标记为错误吗?
答案 0 :(得分:21)
写作
int a = 19;
在print()
内,您声明了一个新的局部变量a
。这与您在类int a
中声明的const_check
无关。成员变量被局部变量称为 shadowed 。在const
函数中声明局部变量并修改它们是完全可以的; const
只适用于对象的字段。
尝试写作
a = 19;
相反,看到出现错误。
答案 1 :(得分:4)
您没有更改在每个方法中创建局部变量a
的实例变量a
。
答案 2 :(得分:1)
您没有在print()或print2()中更改成员变量a。您正在声明一个新的局部变量a,它隐藏了成员变量a。
答案 3 :(得分:-1)
另外,除非我弄错了,否则你忘了实际声明成员变量const开头。