[英]C++ Calling a superclass function of the same virtual function
我是C ++的新手,所以我已經習慣了這種環境下函數和變量的范圍。 我無法解決的一個問題是能夠調用在類的子類中定義的函數,該類將此函數聲明為純虛函數。 這是我的課程結構:
class Clock{
public:
virtual void Tick() = 0;
std::string Print();
//Mutators
int Seconds();
int Minutes();
int Hours();
void setTime(int secs, int mins, int hours);
//Accessors
int getSecs(){ return _secs; }
int getMins(){ return _mins; }
int getHrs(){ return _hours; }
private:
int _secs, _mins, _hours, _days = 0;
};
class NormalClock : public Clock{
public:
void Clock::Tick();
private:
};
class AlarmClock : public Clock{
public:
void Clock::Tick();
bool CheckAlarm();
void SetAlarmTime(int hrs, int mins, int secs);
int GetAHrs();
int GetAMins();
int GetASecs();
private:
int _alarmhrs, _alarmmins, _alarmsecs;
};
在我的源文件中,我想為AlarmClock
類中的Tick()
函數定義一個主體。 但是在此函數中,我想從其超類NormalClock
類調用Tick()
函數。 我的問題是,當我這樣做時卻沒有定義要使用的任何對象時,我無法調用超類Tick()
函數,因為我的IDE(VS2013)認為我是從當前類中引用Tick()
( AlarmClock
子類)。 我在網上四處張望,並確定它可能需要使用using
關鍵字,但是我未能正確實現它。 這是我要構建的功能以供參考:
void AlarmClock::Tick(){
NormalClock::Clock::Tick();
if (this->CheckAlarm()){ cout << "\nAlarm! @ " << this->Print() << "\n\n"; }
}
像上面那樣調用函數時,VS中沒有錯誤,但是編譯器抱怨靜態引用了一個非靜態成員,這是可以理解的。
AlarmClock
不是從NormalClock
派生的,因此您是在靜態地調用該方法(沒有使用NormalClock
實例)。
NormalClock::Clock::Tick();
看起來很像是您的意思是對的。 現在,使您的AlarmClock
實際上繼承自NormalClock
,然后僅NormalClock::Tick()
離開:)
您很親近,但是您的代碼有一些問題。
謝謝大家,這看起來像是在AlarmClock
類的定義中將基類聲明更改為NormalClock
的簡單情況。 VS2013跳過了NormalClock
類,僅觀察Clock
的Tick()
純虛擬函數,這就是為什么我不能按AlarmClock::Tick()
函數的主體中的預期調用NormalClock::Tick()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.