0

我有一个抽象基类。

我有一堆成员函数,它们不是私有的,也不是静态的,也不是模板,只是普通的公共成员函数。

而且我注意到我必须定义在其他函数的定义中被调用的任何这些公共普通函数,即使这些函数没有由 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
4

2 回答 2

1

如果链接器可以证明它们永远不会被调用,您可以只声明函数(而不提供主体)。

然而,虚函数可能会阻碍这一点,因为编译器必须构建一个 vtable(其他一些编译单元可能从类继承并调用函数),然后链接器的任务要困难得多。

于 2012-08-04T13:09:05.427 回答
0

您可以通过一种奇怪但标准的语法使用来实现您想要的效果= 0,如

class T {
    // ...
  public:
    virtual int foo() = 0;
};
于 2012-08-04T13:08:20.223 回答