我创建了一个名为'Device'的类,它被多个设备继承(例如,RFDevice,AccelleroDevice)
Device类继承了Thread类。此Threadclass包含一个名为run的Pure虚函数。是否可以在RFDevice或AcelleroDevice中访问此纯虚函数。
所以,
ThreadClass-> DeviceClass-> RFDeviceClass
我试图添加
'virtual void run(void)= 0'也在设备类中,但这不起作用。
映入眼帘,
答案 0 :(得分:0)
仅当虚拟功能不是私有时。如果是,那么你就不能调用它,也不应该这样做:
class ThreadClass
{
public:
virtual ~ThreadClass() {}
private:
virtual void run() = 0;
};
class Device : public ThreadClass
{
};
class RFDevice : public Device
{
public:
void f()
{
run(); // compiler error
}
};
如果它是受保护的或公共的,那么它将起作用,前提是在类层次结构的某个地方有一个函数的实现。但是除了析构函数之外,虚函数应该很少公开或在C ++中受到保护:
class ThreadClass
{
public:
virtual ~ThreadClass() {}
protected:
virtual void run() = 0; // non-private virtual, strange
};
class Device : public ThreadClass
{
};
class RFDevice : public Device
{
protected:
virtual void run()
{
}
public:
void f()
{
run(); // works
}
};
当然,这在技术上并不称为基本功能。这是一件好事;你最终会得到一个纯虚函数调用,而你的程序会崩溃。
您可能需要做的只是实现私有虚拟功能。那将是首选的课程设计:
class ThreadClass
{
public:
virtual ~ThreadClass() {}
void execute()
{
run();
}
private:
virtual void run() = 0;
};
class Device : public ThreadClass
{
};
class RFDevice : public Device
{
private:
virtual void run()
{
}
};
int main()
{
RFDevice d;
d.execute();
}
如果您不只是维护遗留代码库,那么您应该摆脱线程类并使用C++11 multi-threading。