c++将构造与非成员函数虚化的方法

虚函数拥有因类型而异的行为。而构造函数则是已经明确了对象,才调用的,所以,构造函数不能为虚函数,但是,我们可以通过一些方法使得构造函数可以有虚函数的功能。

所谓的虚构造函数,是一种函数,视其获得的输入,可产生不同类型的对象。用途:如在从磁盘(或网络或磁带等)读取信息时。

class A{                //抽象基类,内含虚函数

public:

..

};

class B:public A{

public:

..

};

class C:public A{

public:

..

};

class D{

public:

D(istream& str)

{

while(str){...}

}

private:

list<A*> data;

};

这个例子中,无论你传递给D,B还是C,都可以生成B或者C的对象(在B和C不是抽象类的情况下)。

虚拷贝构造函数:

虚拷贝构造函数比较容易实现,就是将基类中拷贝构造函数声明成纯虚函数。

这个方法是利用c++的规则的宽松点:

当派生类重新定义其基类的一个虚函数时,不再需要返回值相同。


非成员函数虚化方法:

写一个虚函数做实际工作,再写一个什么都不做的非虚函数,专门调用虚函数。


例子请见more effective c++


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值