我有一个抽象的基类。
我有一堆成员函数,它们不是私有的,也不是静态的,也不是模板,只是普通的公共成员函数。
我注意到我 来定义在其他函数的定义中调用*的任何这些公共普通函数,即使这些函数没有被运行main中的任何代码。
更值得我注意的是,无论如何,如果类是抽象的,那么为什么实际上应该强制定义任何函数,如果类本身不会以任何方式实例化?
这是我在这里发布的第一个问题,如果我没有好好解释自己或做错事,那就很抱歉。
提前感谢您的帮助!
这是我正在谈论的课程的缩短版本:
#ifndef PROCESS_H_INCLUDED
#define PROCESS_H_INCLUDED
#include <iostream>
#include <memory>
using std::weak_ptr;
using std::shared_ptr;
class Process;
typedef shared_ptr<Process> shProcess;
typedef weak_ptr<Process> wProcess;
class Process
{
friend class ProcessManager;
public:
inline void AttachChild(shProcess shChild);
/*
FOR EXAMPLE I CAN LEFT THE FUNCTION ABOVE WITHOUT BEING DEFINE, BUT I HAVE
TO DEFINE THE FUNCTION BELOW OR I GET A COMPILER ERROR
COULD IT BE BECAUSE EVEN IF THIS CLASS IS ABSTRACT I AM USING IT AS A
PARAMETER OF OTHER FUNCTIONS FOR POLIMORPHIC PURPOSES?
*/
shProcess RemoveChild(void){return shProcess();}//reliases ownership of the child
shProcess PeekChild(void){return m_shChild;} //doesn´t release ownership of the child
};
#endif //PROCESS_H_INCLUDED
答案 0 :(得分:1)
如果链接器可以证明它们永远不会被调用,那么你只能声明函数(而不是提供正文)。
虚函数可能会妨碍这一点,因为编译器必须构建一个vtable(其他一些编译单元可能从类继承并调用函数),然后链接器的任务就更加困难了。 / p>
答案 1 :(得分:0)
您可以通过使用语法= 0
的好奇但标准的使用来实现您想要的效果,如
class T {
// ...
public:
virtual int foo() = 0;
};