c++ 将构造函数虚化,动态产生对象

本文探讨了如何在C++中实现在运行时动态创建不同类型的对象,尽管构造函数不能被声明为虚函数。介绍了两种替代方法:1) 使用组合而非继承来模拟构造函数的虚化;2) 利用C++标准中允许的返回类型宽松规则,通过虚函数返回指向派生类的基类指针或引用。
摘要由CSDN通过智能技术生成

        我们知道构造函数有一个必须遵守的规则,即构造函数不能定义为虚函数。但有一个具体的应用是要求是在不同的场景下通过一个指针或者引用生成不同的对象,这就类似于类型的动态生成,即在执行期才能确定具体的对象。这怎么实现呢?

         下面我们介绍两种方法:

         1.不管是在effective c++ 还是在设计模式中,提到的一种特别的替代继承的方法,即组合。采用组合的方法来实现构造函数虚化的功能。具体实现方式为:

class base {
//抽象基类,其中至少含有一个纯虚函数,但其构造函数非虚
      public:
           ....
};
class derive1:public base {
      public:
           ....
};
class derive1:public base {
//没有内含任何纯虚函数
      public:
           ....
};
class derive2:public base {
//没有内含任何纯虚函数
      public:
           ....
};
class  object {
      public:
         ...
       private:
           list<base*> components;
};
在上面的代码中,class object含有一个list对象用来装载base类对象,但是由于base类是一个抽象类,所以list中得内容实际为derive1或者为derive2对象,实现了动态产生对象。

在object类的实现函数还有注意下面的代码:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值