zoukankan      html  css  js  c++  java
  • 将构造函数以及非成员函数 “虚化”

    虚构造函数,这似乎是非常违反直观 的一件事情,由于当你拥有一个对象的指针或者引用的时候,你能够通过该对象的动态类型来调用虚函数,而在此处,你的对象还没有构造完毕。

    事实上,“虚构造函数”并非把你的构造函数声明为virtual,而是某一种函数,依据其输入数据,来决定此时构造什么类型的对象。比方你要从文件或者网络上读取一些数据,从该数据你来决定你要创建什么类型的对象。


    比方:

    下述的继承体系:[摘自More Effective C++ P124]

    class Base

    {

    public: ... ; //类的定义细节不重要,省略

    };

    class Child1 : public Base

    {

    public: ... //同上 

    };

    class Child2:public Base

    {

      pubic: ... //同上

    };

    class Children

    {

    private: 

    list<Base *> childs;

    };

    上述Children对象的构造可能是依据读入的数据(比方标准输入端)来决定的,因此会有以下的构造函数:

    Children ::Children(istream &in)

    {

    while(in非空)

    //读取数据进行初始化,而且增加到Childs链表中。

    }

    于是乎,上面的读入数据初始化的过程我们能够使用一个函数读取输入流,构造对象并返回,于是Children类就会像这样:

    class Children

    {

    public:

    ...

    private:

    static Base *read_input(istream & in);

    };

    Childrent::Children(istream &in)

    {

    while(in 非空)

    {

    childs.push_back(read_input(in));

    }

    }

    就这样,就将ctor虚化了。


  • 相关阅读:
    24种设计模式之适配器模式
    内存分配与回收策略
    java 吞吐量
    JVM运行数据区
    垃圾收集算法学习
    对象的回收
    未来一段时间学习方向
    多线程并发容器
    python基础数据类型--list列表
    Sublime Text 快捷键
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4309593.html
Copyright © 2011-2022 走看看