不需要cpp文件实现的那种。基类只有接口,没有任何的成员变量存在。构造、析构函数的处理不太熟悉,比如:// Ineterface.H
class CInterface
{
public:
CInterface(void){};//构造函数是否一定需要函数体?
~CInterface(void){};//析构函数是否也是一定需要函数体?如果声明析构函数为纯虚函数~CInterface(void) = 0子类怎么实现它?
virtual int Function1()=0;
virtual int Function2()=0;
virtual int Function3()=0;
}

解决方案 »

  1.   

    不单纯是一个含有纯虚函数的抽象类,而是一个除了构造、析构、纯虚函数外,没有任何其他成员的抽象类。我要作为DLL导出类的基类使用。听说这样可以避免内存布局给导出类带来的问题。
      

  2.   

    对啊,我现在是声明析构为虚的。这样子就不会影响DLL导出类的内存布局?我需要通过这个接口类来实现多态。DLL封装的是一个个的实例化类。
    刚漏了析构函数的virtual标识。构造函数会不会影响DLL导出类的内存布局不一致?比如今后我就只是更新DLL,并不对exe工程进行重新build,那么会否带来潜在的由于内存布局不一致导致的DLL访问错误问题?// Ineterface.H
    class CInterface
    {
    public:
    CInterface(void){};//构造函数是否一定需要函数体?
    virtual ~CInterface(void){};//析构函数是否也是一定需要函数体?如果声明析构函数为纯虚函数~CInterface(void) = 0子类怎么实现它?
    virtual int Function1()=0;
    virtual int Function2()=0;
    virtual int Function3()=0;
    }
      

  3.   

    相对于JAVA的接口、抽象类。C++的这个对应接口类就是一个纯虚类了。
    这个纯虚类的构造、析构函数会否影响子类函数访问的内存布局?我的意思是说如果DLL导出类派生自这个接口类,那么派生类的内存布局的改变是否对于使用接口的客户透明?