如何在C ++中创建没有无参数构造函数的接口?

时间:2009-10-21 08:52:45

标签: c++

如何隐藏消费者的默认构造函数?我试图私下写,但有编译问题。

解决方案是:

class MyInterface
{
public:
            MyInterface(SomeController *controller) {}
};

class Inherited : public MyInterface
{

private:
            Inherited () {}
public:
            Inherited(SomeController *controller)
            {
            }

};

3 个答案:

答案 0 :(得分:10)

在您的情况下,由于您已经提供了一个带有一个参数SomeController*的构造函数,因此编译器不会为您提供任何默认构造函数。因此,默认构造函数不可用。

即,

MyInterface a;

会导致编译器说没有合适的构造函数。

如果你想让构造函数显式不可用,那么就像private一样。

您发布的代码

编辑

  • 您需要显式调用基类MyInterface构造函数(带有单个参数)。否则,默认情况下,派生类构造函数(Inherited)将查找缺少的Base类默认构造函数。

    class Inherited:public MyInterface     {     私人的:             Inherited();     公共:

        Inherited(SomeController *controller):MyInterface(controller)
        {}
    };
    

答案 1 :(得分:4)

根本就不要把它放进去。具有非默认ctor的类没有编译器提供的默认构造函数。它有一个编译器生成的副本构造函数;继承自boost::noncopyable以删除它。

答案 2 :(得分:1)

写作:

private:
  MyInterface();

以两种方式完成这一操作:首先,除了朋友之外没有人可以访问它,但更好的是:如果朋友确实试图访问它,链接器会因为没有实现而抱怨。

同样的技巧适用于复制构造函数和赋值运算符。