константный объект в с ++ - PullRequest
       10

константный объект в с ++

4 голосов
/ 04 апреля 2010

У меня вопрос к постоянным объектам. В следующей программе:

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 должна привести к ошибке, но программа у меня работает нормально. Я думаю, что у меня есть некоторая путаница здесь, кто-нибудь может сказать мне, почему компилятор не помечает его как ошибку?

Ответы [ 4 ]

21 голосов
/ 04 апреля 2010

письменно

int a = 19;

внутри print(), вы объявляете новую локальную переменную a. Это не имеет ничего общего с int a, который вы объявили внутри класса const_check. Считается, что переменная-член затенена локальной переменной. И вполне нормально объявлять локальные переменные в функции const и изменять их; const сущность применяется только к полям объекта.

Попробуйте написать

a = 19;

вместо этого и появляется сообщение об ошибке.

4 голосов
/ 04 апреля 2010

Вы не изменяете переменную экземпляра a вы создаете локальную переменную a в каждом методе.

1 голос
/ 04 апреля 2010

Вы не изменяете переменную-член a ни в print (), ни в print2 (). Вы объявляете новую локальную переменную a, которая затеняет переменную-член a.

0 голосов
/ 04 апреля 2010

Кроме того, если я не ошибаюсь, вы действительно забыли объявить переменную-член const для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...