把ctor和非成员函数虚化
来源:互联网 发布:七天网络查分登录 编辑:程序博客网 时间:2024/06/04 19:24
#include <iostream>//virtual ctor// firstclass NLcomponent{public: virtual NLcomponent* clone() = 0; //...};class TextBlock : public NLcomponent{public: virtual TextBlock* clone() { }};class Graphic : public NLcomponent{public: virtual Graphic* clone() { }};class NewLetter{public: //...private: list<NLcomponent*>components;};//////////////////////////////////////////////////////////////////////secondclass NewLetter{public: NewLetter(istream& str);private: list<NLcomponent*>components;};NewLetter::NewLetter(istream& str){ while(str) components.push_back(readComponent(i_str)); //readComponent is a like ctor,请注意,NLcomponent是一个抽象基类 //构造函数的虚化我认为就是这里, //...}//////////////////////////////////////////////////////////////////////third ***copy ctor***class NLcomponent{public: virtual NLcomponent* clone() = 0; //...};class TextBlock : public NLcomponent{public: virtual TextBlock* clone() {return new TextBlock(*this) }};class Graphic : public NLcomponent{public: virtual Graphic* clone() {return new Graphic(*this) }};class NewLetter{public: NewLetter(NewLetter&); //...private: list<NLcomponent*>components;};NewLetter::NewLetter(NewLetter& rhs){ //迭代遍历rhs的list,运用每一个元素的virtual copy ctor //讲元素复制到此对象的component list 中,一下代码的细节讨论 // for(list<NewLetter>::const_iterator it = rhs.components.begin() ; it != rhs.end() ; it ++ ) { components.push.back((*it)->clone); //it只想当前元素,所以调用元素的clone函数取得元素的一个副本 //然后将副本加到component list尾端 }}//virtual non_fcn// 简易版class NLcomponent{public: virtual ostream& operator<< (ostream&) = 0; //...};class TextBlock : public NLcomponent{public: virtual ostream& operator<< (ostream&) { }};class Graphic : public NLcomponent{public: virtual ostream& operator<< (ostream&) { }};// 并没有考虑class NewLetterTextBlock T;T<< cout;// T.operator<<(cout);/* virtual ostream& operator<< (ostream& os) { //假设int i ==> mem_data os << i ; return *this; }*///完整版class NLcomponent{public: virtual ostream& print (ostream&) = 0; //...};class TextBlock : public NLcomponent{public: virtual ostream& print (ostream&) { }};class Graphic : public NLcomponent{public: virtual ostream& print (ostream&) { }};inline ostream& operator<<(ostream & os, NewLetter& c){ c.print(os);}/*首先,他可以inline,一般的虚函数是不能inline,然后这是一个妄图把非虚函数虚化 上面其实有觉得,虚化这一过程,总是在他的派生类分出明细,在另一个非继承体系 类来统一调用/实施,*/
0 0
- 把ctor和非成员函数虚化
- 将构造函数和非成员函数虚拟化
- 8.将构造函数和非成员函数“虚拟化”
- 将构造函数和非成员函数虚拟化
- 技术(1)—构造函数和非成员函数的虚化
- 分清成员函数,非成员函数和友元函数
- 成员函数 非成员函数和友元函数
- 成员函数 非成员函数和友元函数
- 成员函数、非成员函数和友元函数介绍
- 分清成员函数,非成员函数和友元函数
- 成员函数,非成员函数和友元函数
- 分清成员函数,非成员函数和友元函数
- 虚成员函数和非虚成员函数调用方式有什么不同?
- 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别?
- 什么是类的成员函数和非成员函数
- 静态成员函数和非静态成员函数的区别
- Item 9 避免在ctor和dtor中调用虚函数
- 蓝牙 UUID 汇总
- 笔试面试题10--特殊指针
- 《快学Scala》第二章习题解答
- AsyncTask基本用法
- 原来单例模式可以这样实现
- 把ctor和非成员函数虚化
- Union Find算法
- 1.创建型.1工厂模式
- 一种大规模网络流式数据缓存写入的方法
- 表插入排序
- Bash别名与快捷键
- Bash历史命令
- 模板超编程和tuple的输出
- Bash通配符及特殊符号