【发布时间】:2021-12-16 03:58:49
【问题描述】:
编辑。这是我在 stackoverflow 中的第一个问题 :) 非常感谢您的回答。但似乎我没有清楚地澄清问题。我将使用完整代码打开新问题。
有人可以帮助理解这段代码吗?
我有 Foo 类,它没有构造函数,它的所有方法都是虚拟的。
我只有标题。
class Bar;
class USER_API IFoo
{
public:
virtual ~IFoo() {}
virtual uint32_t GetWidth() const = 0;
// more virtual methods...
};
class USER_API Foo
: public IFoo
{
public:
virtual Bar *GetBar() = 0;
};
它没有构造函数,所以我不能使用auto ptrFoo = new Foo 方法。
这是否意味着Foo 类没有隐式/显式构造函数?
如果是,如何防止调用默认构造函数?
我知道的唯一方法是使构造函数成为受保护的成员。但是在这个头文件中没有声明 c'tor。
我可以从下面的Bar 类中的GetFoo() 方法获取Foo 实例的指针。
class Foo;
class USER_API Bar
{
public:
Bar();
virtual ~Bar();
Foo *GetFoo();
const Foo *GetFoo() const;
}
我很好奇,Bar.cpp 如何创建并拥有 Foo 的实例?
我猜是 Bar.cpp 有一个继承自 Foo 的类。
任何提示将不胜感激..
【问题讨论】:
-
除非您明确声明或删除它们,否则
IFoo和Foo都将具有默认构造函数。它将隐式生成以默认初始化任何成员或基(如果没有成员或基,则不执行任何操作)。你不能初始化你的类,因为它们都有纯虚函数(如果派生类是可实例化的,则派生类必须覆盖的虚函数)。要禁止生成默认构造函数,请在 C++11 中执行IFoo() = delete(对于IFoo类)或(在 C++11 之前)声明IFoo()私有但不要定义它。 -
它没有构造函数它有一个构造函数。
标签: c++ class constructor