Я не уверен, где я ошибаюсь, но, похоже, с моей стороны есть какая-то неверная концепция. У меня есть базовый класс, производный класс и некоторые методы, как в этом примере.
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc)
void reset(int curr_loc){
curr_loc = curr_loc;
}
}
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc)
}
Derived a(1);
a.reset(2);
a.curr_loc //is still 1?
Когда я сейчас вызываю "a.curr_loc", я все еще получаю 1. Я думал, что переопределю значение с помощью сброса метода, но это делается для другого объекта... Есть ли способ сделать это без необходимости копировать функции базового класса для производного класса?
curr_loc = curr_loc;
Эта строка ничего не делает. Он присваивает переменную самой себе. Тот факт, что существует также переменная экземпляра с именем curr_loc
, здесь не упоминается, поскольку ее затеняет локальная переменная с тем же именем.
Вы можете либо переименовать аргумент во что-то другое, либо явно использовать this
для назначения.
this->curr_loc = curr_loc;
Этот фрагмент кода
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc)
void reset(int curr_loc){
curr_loc = curr_loc;
}
}
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc)
}
имеет синтаксические ошибки.
Вам нужно написать
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc){}
void reset(int curr_loc){
Base::curr_loc = curr_loc;
}
};
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc) {}
};
Обратите внимание на определение сброса функции-члена. Он должен быть определен как
void reset(int curr_loc){
Base::curr_loc = curr_loc;
}
или нравится
void reset(int curr_loc){
this->curr_loc = curr_loc;
}
В противном случае параметр ciur_loc в этом операторе присваивается самому себе.
curr_loc = curr_loc;
потому что он скрывает элемент данных с тем же именем класса Base.
Большое спасибо. Я не знал, что это ключевое слово работает через указатель... Пробовал this.curr_loc, который не работает в c++