class a
{
object guest;
}
a::a() : guest(required_argument)
{
}
问题是我需要在创建类之后将 guest 的构造函数称为“对象”。有办法吗?
最佳答案
我想在guest
之后构造host
的原因是在host
的构造中需要guest
的某些功能。在这种情况下,您可以将该功能外包到guest
之前构造的单独的类中。从而
class some_interface { /* some abstract functionality needed by guest::guest() */ };
class guest
{
public:
guest(some_interface const&); // calls pure virtual functions of some_interface
/* more stuff */
};
class host_interface : public some_interface
{
/* implements pure virtual methods of its base */
};
class host
{
host_interface _interface;
guest _guest;
public:
host(...)
: _interface(...)
, _guest(_interface)
{}
/* more stuff */
};
请注意,以下朴素的实现将失败
class host : some_interface
{
/* some_data */
guest _guest;
public:
host(...)
: some_data(...)
, _guest(*this)
{}
/* more stuff */
};
因为传递给
this
时尚未构建guest::guest()
,并且纯虚拟函数将被调用(我确实曾经有此错误,并且得到了运行时错误“纯虚拟函数已调用”,即使编译器本来可以检测到此)。关于c++ - 使用 guest 对象更改类中调用构造函数的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14185038/