摘要:
类模版的定义和声明都和函数模版类似:代码如下:template class Stack{public: void push(const T&); void pop(); T top()const; bool empty() const{return m_elems.empty();}private: vector m_elems; };类模版的使用时需要显示指定模版参数类型。类模版成员函数的是在调用的时候实例化templatevoid Stack::push(const T& elems){ m_elems.push_back(elems);}templatevoid Stac 阅读全文
摘要:
函数模版的定义:template T const& max(const T& a,const T b){ return a > b ? a:b;}int main(){ return 0;}函数模版的使用:#include #include using namespace std;template T const& max(const T& a,const T b){ return a > b ? a:b;}int main(){ int i = 7; cout << max(34,7) <<endl; double j = 阅读全文
摘要:
一.使用Templates的原因:例如我们要写一个算法,由于类型不同,我们不得不做一下工作。1.使用宏定义代替Templates不利于类型检查。2.将一些算法放在基类里,以后的扩展的子类都需要充基类继承这些算法,不利于维护和扩展。3.重复一遍有一遍的根据不同类型写出算法,显然是一个很糟糕的决定。二.引入模版的定义关键字template,引入类型参数的关键字typename/class尽量用typename,类型参数一般用U,T,V等。三.在编译过程中并不是把函数模版编译成能处理任何类型的实例,而是实例化模版参数的每种类型。四.在实例化之前检查模版是否有语法错误,在实例化期间检查是否所有调用都有 阅读全文
摘要:
设计模式的学习以及各种设计模式的C++实现已经告一段落了,解释器模式和迭代器模式,以及模版办法简单的看了一下。画UML图的时候再重点学习从今天开始学习Templates。 阅读全文
摘要:
状态模式原理:随着状态的变化,对象的行为也发生变化代码如下:#include #include #include using namespace std;class War;class State{public: virtual void fire(War *war) { }};class War{public: War(State* state):m_state(state),m_day(0){} void Setday(int day) { m_day = day; } int Getday() { return m_day; } void SetState(State *stat... 阅读全文