摘要:1、模板声明和模板定义如果不在同一个文件中,在另一个文件中使用模板时会出现链接错误。例子://Myfirst.h#ifndef MYFIRST_H#define MYFIRST_H#include#includeusing namespace std;templatevoid print_typeo...
阅读全文
摘要:1、关键字typename引入关键字typename是为了说明:模板内部的标识符可以是一个类型。当某个依赖与模板参数的名称是一个类型时,就应该使用typename。templateclass MyClass{ typename T::SubType * ptr; // typename说明SubT...
阅读全文
摘要:对于函数模板和类模板,模板参数并不局限于类型,普通值也可以作为模板参数。但非类型模板参数是有限制的,只能是常整数(包括枚举值)或者指向外部链接对象的指针,浮点数、类对象和内部链接对象不允许作为非类型模板参数的。1、非类型类模板参数例子#includeusing namespace std;//Max...
阅读全文
摘要:1、类模板的声明template class Stack{ ...}2、在类模板内部,T可以像其他任何类型一样,用于声明成员变量和成员函数。template class Stack{private: std::vector elemes; // 存储元素的容器public: Stack();...
阅读全文
摘要:1、定义函数模板:templateinline T const& Max(T const& a, T const& b){ return a 指定了模板参数区域,typename表明了后面的参数是一个类型名, T是模板参数,它可以用来指定所有的类型,a和b是调用参数,位于模板函数名称后面,在一对(...
阅读全文
摘要:条款32:在未来时态下发展程序未来式思维要加上一些额外的考虑:a、提供完整的类——即使某些部分目前用不到。当新的需求进来,你不太需要回头去修改哪些类。b、设计你的接口,使有利于共同的操作行为,阻止共同的错误。让类轻易地被正确运用,难以被错误运用。c、尽量使你的代码一般化,除非有不良的巨大后果。 “未...
阅读全文
摘要:四、自行仿真虚函数表格(使用非成员函数的碰撞处理函数)//GameObject.h#ifndef GAMEOBJECT_H#define GAMEOBJECT_Hclass GameObject{ //抽象基类public: virtual ~GameObject() = 0;};class Spa...
阅读全文
摘要:一个虚函数调用动作称为一个消息分派,如果某个函数调用根据两个参数而虚化就称为双重分派,根据多个函数而虚化称为多重分派。C++不支持双重分派和多重分派,因此我们必须自己实现。有以下几种方法:一、虚函数 + RTTI(运行时期类型辨识)//GameObject.h#ifndef GAMEOBJECT_H...
阅读全文
摘要:“用来代表其他对象”的对象被称为proxy objects,用来表现proxy objects者,称为proxy classes(代理类)。一、实现二维数组//Array2D.h#ifndef ARRAY2D_H#define ARRAY2D_H//代理类templateclass Array1D{...
阅读全文
摘要:三、引用计数基类和智能指针实现的String类//RCObject.h#ifndef RCOBJECT_H#define RCOBJECT//引用计数基类class RCObject{public: void addReference();//增加引用计数 void removeReference(...
阅读全文
摘要:一、非引用计数实现的String类//String.h#ifndef STRING_H#define STRING_H#define _CRT_SECURE_NO_WARNINGS#includeclass String{public: String(const char* initValue = ...
阅读全文
摘要:一、类似C++标准程序库提供的auto_ptr template的智能指针//Smart.h#ifndef SMART_H#define SMART_Htemplateclass SmartPtr{public: SmartPtr(T* realPtr = 0); //构造函数 ~SmartPtr(...
阅读全文
摘要:一、要求对象产生于heap之中方法:让析构函数成为private,构造函数为public。然后导入一个伪的析构函数,来调用真正的析构函数。但是它也妨碍了继承和内含。例子://UPNumber.h#ifndef UPNUMBER_H#define UPNUMBER_H#includeclass UPN...
阅读全文
摘要:一、允许零个对象每当产生一个对象时会有一个构造函数被调用,因此阻止某个类产出对象的最简单方法就是将该类的构造函数声明为private。例子:class CantBeInstantiated{private: CantBeInstantiated(); CantBeInstantiated(const...
阅读全文
摘要:一、将constructor虚化1、例子:#include#include#includeusing namespace std;class NLComponent{public: NLComponent(){ cout > str){ components.push_back(readComp...
阅读全文
摘要:条款22:考虑以操作符复合形式(op=)取代其独身形式(op)1、确保操作符的复合形式(如operator+=)和其独身形式 (如 operator+ )之间的自然关系能够存在,一个好方法就是以前者为基础实现后者。例子:#includeusing namespace std;class Ration...
阅读全文