Bjarne:为什么不能有虚拟构造函数?

Bjarne:为什么不能有虚拟构造函数?,第1张

Bjarne:为什么不能有虚拟构造函数?,第2张

虚拟调用是一种可以在给定的部分信息下工作的机制。特别是,虚拟性允许我们调用一个函数。对于这个函数,我们只知道它的接口,不知道具体的对象类型。但是要创建一个对象,你必须有完整的信息。特别是,您需要知道要创建的对象的具体类型。因此,对构造函数的调用不能是虚拟的。

当需要构建一个对象时,一种间接的技术通常被用作“虚拟构造函数”。例如,请参考C++编程语言第三版第15.6.2节。

下面的例子展示了一种机制:如何使用抽象类来构建适当类型的对象。

Struct F {
//对象构建函数的接口
virtual a * make _ an _ a()const = 0;
virtual B * make _ a _ B()const = 0;
};

void user(const F & fac)
{
a* p = fac . make _ an _ A();//取A作为合适的类型
B * q = fac . make _ A _ B();//将B作为合适的类型
/...
}

struct FX:F {
A * make _ an _ A()const { return new AX();} // AX是a
b * make _ a _ b()const { return newbx()]的导数;} // AX是b的导数
};

struct FY:F {
A * make _ an _ A()const { return new AY();} // AY是a
b * make _ a _ b()const { return new by()的导数;} // BY是b的导数
};


int main()
{
user(FX());//此用户建立AX和BX
用户(FY());//该用户建立AY和BY
/...
}

这是所谓的“工厂模式”的变体。关键是用户功能和AX或者AY之类的信息是完全分离的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Bjarne:为什么不能有虚拟构造函数?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情