Получить мой базовый класс, чтобы увеличить мой производный класс объектов целое число - PullRequest
0 голосов
/ 03 октября 2018

В следующем коде, как получить функцию базового класса clocks :: increment () для приращения объекта производного класса thing2.hrs без изменения main ()?Если я добавляю временные операторы cout в increment (), то вызов thing.increment (), кажется, увеличивает элемент объекта базового класса или случайную область памяти, если я не создал базовый объект.Без изменения вызова функции main () для передачи переменной (и изменения функции), является ли единственным решением переопределить функцию новым определением в производном классе?

   class clocks
{
public:
    clocks();
    void increment();

private:
    int hrs;
};
clocks::clocks()
{
    hrs = 1;
}
void clocks::increment()
{
    hrs++;
}



class childClock : public clocks
{
public:
    childClock();
    int hrs;
};
childClock::childClock()
{
    hrs = 2;
}


int main()
{
    clocks thing;
    childClock thing2;

    cout << thing2.hrs<<" ";
    thing2.increment();
    cout << thing2.hrs;

    return 0;
}

1 Ответ

0 голосов
/ 03 октября 2018

Мало вещей.

  1. Вам не нужен второй hrs в дочернем классе, поскольку базовый класс уже объявил этот член.
  2. hrsбыть защищенным, чтобы дочерний класс мог получить к нему доступ или установить его, и вместо этого вы можете использовать получатель для доступа к значению.

Следуя этим примечаниям, мы можем немного отредактировать ваш код следующим образом:

#include <iostream>

class clocks{
public:
    clocks();
    void increment();
    int getHrs();
protected:
    int hrs;
};

clocks::clocks(){
    hrs = 1;
}

int clocks::getHrs(){
  return hrs;
}

void clocks::increment(){
    hrs++;
}

class childClock : public clocks{
  public:
  childClock();
};

childClock::childClock(){
  hrs = 2;
}

int main(){
    clocks thing;
    childClock thing2;
    std::cout << thing2.getHrs() <<" ";
    thing2.increment();
    std::cout << thing2.getHrs();
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...