我希望我的Class B
能够从Class A
调用成员函数。解决这个问题的最佳方式是什么?
对于某些上下文,这里是我的代码的缩写版本的片段:
class Time{
public:
Time();
Time(int hour, int minute);
int time_GetHour() const;
-----
private:
int hour;
int minute;
};
int Time::time_GetHour() const{
return hour;
}
class DaTime{
public:
DaTime();
DaTime(Day day, Time start, Time end);
dt_Difference(DaTime &a, DaTime &b) const;
private:
int duration;
Time start;
Time end;
};
int DaTime::dt_Difference(DaTime &a, DaTime &b) const{
int diff_hour = 0;
int diff_min = 0;
int diff = 0;
if(dt_LessThanOrEqual(a,b)){
diff_hour = (b.time_GetHour() - a.time_GetHour())*60;
diff_min = b.time_GetHour() - a.time_GetHour();
diff = diff_hour + diff_min;
return diff;
}
}
我收到的错误是说我的班级DaTime
没有会员time_GetHour()
,我可以看到。我问的是什么是解决修复或绕过此错误的最佳方法?感谢。
答案 0 :(得分:3)
当你澄清你想在内部使用Time
类而不是继承它时,你可以通过访问你提到的成员变量来解决你的问题:
diff_hour = (b.end.time_GetHour() - a.start.time_GetHour())*60;
但是我不确定你的必要时间数学与上面的样本相符。
BTW,你拥有的两个操作数操作样本应该是静态类函数,甚至是全局运算符定义恕我直言。
答案 1 :(得分:0)
您需要Time
中的功能才能返回分钟数。这是经过修订的Time
。
class Time
{
public:
Time();
Time(int hour, int minute);
int time_GetHour() const;
int time_GetMinute() const;
private:
int hour;
int minute;
};
int Time::time_GetHour() const
{
return hour;
}
int Time::time_GetMinute() const
{
return minute;
}
您对DaTime
的定义有点不清楚。您是否需要存储start
和end
以及duration
?您是否可以存储start
和end
或duration
?输入Day day
用于构建DaTime
的目的是什么?
如果您已计算duration
,则可以稍微更改DaTime::dt_Difference
以使用duration
,而不是依赖Time
的成员函数。
int DaTime::dt_Difference(DaTime &a, DaTime &b) const
{
int diff = 0;
if(dt_LessThanOrEqual(a,b))
{
diff = b.duration - a.duration;
}
return diff;
}
但是,你使用decalred DaTime::dt_Difference
的方式,使用它会很尴尬。你必须有这样的行:
DaTime dt1;
DaTime dt2;
DaTime dt3;
int difference = dt1.dt_Difference(dt2, dt3);
请注意,dt1
的状态对dt_Difference
的返回值没有影响。这是打算如何使用它?更好的选择是将dt_Difference
的声明更改为:
int dt_Difference(const DaTime &a) const;
然后,实施将改为:
int DaTime::dt_Difference(const DaTime &a) const
{
int diff = 0;
if(dt_LessThanOrEqual(*this,a))
{
diff = b.duration - this->duration;
}
return diff;
}
然后,您的使用可以更改为:
DaTime dt1;
DaTime dt2;
int difference = dt1.dt_Difference(dt2);
此外,无需使用名称time_GetHour
和time_GetMinute
。由于您正在处理班级time
,因此Time
是多余的。您可以将其更改为getHour
和getSecond
。同样,您也可以将dt_Difference
更改为operator-
。您还可以使用if(dt_LessThanOrEqual(*this, a))
替换if ( *this <= a )
的使用。第二种形式比第一种形式更具可读性。
总之,您的代码可能会更改为如下所示:
class Time
{
public:
Time();
Time(int hour, int minute);
int getHour() const;
int getMinute() const;
private:
int hour;
int minute;
};
int Time::getHour() const
{
return hour;
}
int Time::getMinute() const
{
return minute;
}
class DaTime
{
public:
DaTime();
DaTime(Day day, Time start, Time end);
int operator-(const DaTime &a) const;
bool operator<=(const DaTime& rhs) const;
private:
int duration;
};
int DaTime::operator-(const DaTime &a) const
{
int diff = 0;
if( a <= *this )
{
diff = this->duration - a.duration;
}
return diff;
}
DaTime dt1;
DaTime dt2;
int difference = dt2 - dt1;