码迷,mamicode.com
首页 > 其他好文 > 详细

将构造函数以及非成员函数 “虚化”

时间:2014-07-04 09:13:37      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:构造函数   虚构造函数   

虚构造函数,这似乎是很违反直观 的一件事情,因为当你拥有一个对象的指针或者引用的时候,你可以通过该对象的动态类型来调用虚函数,而在此处,你的对象还没有构造完成。

其实,“虚构造函数”并不是把你的构造函数声明为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虚化了。


将构造函数以及非成员函数 “虚化”,布布扣,bubuko.com

将构造函数以及非成员函数 “虚化”

标签:构造函数   虚构造函数   

原文地址:http://blog.csdn.net/xuqingict/article/details/36698463

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!