在下面的代码中,如何在不修改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;
}
答案 0 :(得分:0)
几件事。
hrs
,因为基类已经声明了该成员。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;
}