1、C++由四个次语言组成:c、c++类对象、template C++、STLc++高效编程守则视状况而变化,取决于使用c++的哪一部分。2、尽量以const、enum、inline替换#define a、常量定义式通常被放在头文件中(以便被不同的源码包含进去),如果想将常量指针(即指向常量的指针)...
分类:
编程语言 时间:
2014-07-17 22:35:59
阅读次数:
317
mvn clean、mvn package、mvn clean install -e、mvn dependency:analyze、mvn denpendency:tree -Dincludes=*:junit -Dverbose、mvn help:effective-pom/mvn help:ef...
分类:
其他好文 时间:
2014-07-16 18:17:22
阅读次数:
1393
经验:Template metaprogramming (TMP, 模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率
示例1:
template
void advance(IterT &iter, DistT d){
if(typeid(typename std::iterator_traits::iterator_catogory) == typeid(std::random_access_it...
分类:
编程语言 时间:
2014-07-16 13:20:54
阅读次数:
313
经验:private 继承意味 is-implemented-in-terms of。它通常比 composition 的级别低。
但是当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的 virtual 函数时,这么设计是合理的
经验:和 composition 不同, private 继承可以造成 empty base 最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要
示例1:虽是 Empty class,但却不仅要花...
分类:
编程语言 时间:
2014-07-15 22:41:05
阅读次数:
284
经验:Traits classes 使得"类型相关信息"在编译期可用。它们以 templates 和 "templates 特化"完成实现
示例:
template
class deque{
public:
class iterator{
public:
typedef random_access_iterator_tag iterator_category;
};
};
//template
template
struct iterator_trai...
分类:
编程语言 时间:
2014-07-15 22:40:20
阅读次数:
372
1.virtual 函数版本
class GameCharacter{
public:
virtual int healthValue() const; //返回人物的健康指数, derived classes 可重新定义它
};
2.使用 non-virtual interface 手法,那是 Template Method 设计模式的一种特殊形式。
让客户通过 public non-virtual 成员函数间接调用 private virtual 函数
class GameCharacter{
pu...
分类:
编程语言 时间:
2014-07-15 22:36:18
阅读次数:
364
经验:请使用 member function templates(成员函数模板)生成"可接受所有兼容类型"的函数
示例:泛化 copy 构造函数
temmplate
class SmartPtr{
public:
template
SmartPtr(const SmartPtr &other) //member template, 为了生成 copy 构造函数
: heldPtr(other.get()){...}
T *get() const...
分类:
编程语言 时间:
2014-07-15 13:10:24
阅读次数:
319
经验:Templates 生成多个 classes 和多个函数,所以任何 template 代码都不该与某个造成膨胀的 template 参数产生相依关系
因非类型模板参数(non-type template parameters) 而造成的代码膨胀,往往可消除,做法是以函数参数或 class 成员变量替换 template 参数
示例:
template //size_t 是非类型模板参数
class SquareMatrix{
public:
//...
分类:
编程语言 时间:
2014-07-15 13:04:39
阅读次数:
307
经验:多重继承比单一继承复杂。它可能导致新的歧义性,以及对 virtual 继承的需要
示例:
class BorrowableItem{
public:
void checkOut();
};
class ElectronicGadget{
private:
bool checkOut() const;
};
class MP3Player:
public BorrowableItem
public ElectronicGadget
{...};
MP3Player mp;
mp.checkOut...
分类:
编程语言 时间:
2014-07-14 13:38:11
阅读次数:
240
经验:class 和 templates 都支持接口和多态。
对 classes 而言接口是显式的,以函数签名为中心。多态则是通过 virtual 函数发生于运行期
对 templates 参数而言,接口是隐式的,奠基于有效表达式。多态则是通过 templates 具体化和函数重载解析(function overloading resolution)发生于编译期。
示例1:显式接口和运行期多态
class Widget{
public:
Widget();
virtual ~Widget();
vir...
分类:
编程语言 时间:
2014-07-14 12:54:57
阅读次数:
195