C++调用同一虚拟函数的超类函数
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)认为我指的是当前类(AlarmClock
子类)中的Tick()
。我在网上四处查看,确定它可能需要使用using
关键字,但我一直未能正确实现它。以下是我试图构建的功能以供参考:
void AlarmClock::Tick(){
NormalClock::Clock::Tick();
if (this->CheckAlarm()){ cout << "nAlarm! @ " << this->Print() << "nn"; }
}
如上所述调用函数时,VS中没有错误,但编译器抱怨对非静态成员的静态引用,这是可以理解的。
您很接近,但您的代码有一些问题。
- AlarmClock未从NormalLock继承
- 在AlarmClock::Tick中,调用NormalLock::Ticket()而不是NormalLock:
- 在NormalLock中,更改类声明中的Clock::Tick to Tick
AlarmClock
不是从NormalClock
派生的,因此您静态调用该方法(没有要使用的NormalClock
实例)。
NormalClock::Clock::Tick();
看起来你的意思很对。现在让您的AlarmClock
实际继承自NormalClock
,然后只继承NormalClock::Tick()
:)
谢谢大家,在类AlarmClock
的定义中将基类声明更改为NormalClock
看起来很简单。VS2013跳过了NormalClock
类,只观察到Clock
中的Tick()
纯虚拟函数,这就是为什么我无法在AlarmClock::Tick()
函数体中按预期调用NormalClock::Tick()
。
相关文章:
- 在类构造函数中传递对外部函数的引用
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- 将自由函数绑定为类成员函数
- 带有类的函数指针
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 我可以从我的超类调用子类构造函数吗?
- C++ 如何使用一个参数从派生类构造函数中调用具有两个参数的超类构造函数
- 从构造函数的主体调用超类构造函数
- 在超类构造函数中初始化结构数组
- C ++如何使用子类调用函数,具有超类指针
- C++ 在超类构造函数中运行依赖于子类覆盖的大量变量的代码的正确方法是什么?
- 调用子重写时,始终调用超类虚拟函数
- c++使用计算参数调用超类构造函数
- SWIG:使用%typemap(javabase)并调用java中的超类构造函数
- c++处理跨超/基类的函数指针
- 多级继承而不调用超类构造函数
- 将参数传递给超类构造函数
- 是否可以从超类实现中调用子类虚函数?
- 子类调用超类构造函数
- c++用va_arg调用超类构造函数