获取我的基类以增加派生类对象的整数

时间:2018-10-03 18:53:41

标签: c++ inheritance

在下面的代码中,如何在不修改main()的情况下使基类函数clocks :: increment()增加该函数,以使派生类对象something2.hrs递增?如果我在crement()中添加临时cout语句,则如果我还没有创建基础对象,则调用“ thing2.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 :(得分:0)

几件事。

  1. 子类不需要第二个hrs,因为基类已经声明了该成员。
  2. hrs应该受到保护,以便子类可以访问/设置它,并且您可以使用getter来访问值。

按照这些说明,我们可以对您的代码进行如下修改:

#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;
}