设计上的讨论集中于“如何在两个不同的做法中择一完成某项任务”,你该选择继承还是模板?选择public 继承还是private继承?该选择private继承还是composition?该选择member函数还是non-memer函数?该选择pass-by-value还是pass-by-reference?在这些选择点上做出正确决定很重要,因为一个不良的决定可能不至于很快带来影响,却在后期才显现恶果,那时候再来矫正既困难又耗时间,而且代价昂贵。
即使你完全知道该做什么,完全进入正轨还是可能有点棘手。什么是assignment操作符的适当返回类型?何时该令析构函数为virtual?当operatornew无法找到足够内存时该如何行事?
彻底了解C++如何行为,为什么那样行为,以及如何运用其行为形成优势。
初始化:
class A{
public :
A();
};
class B{
public:
explict B(int x=0;bool b=true);
};
class C{
public:
explict C(int x);
};
classes B和C的构造函数被申明为explict,这可阻止他们用来执行隐式类型转换(implicit type conversion),但仍可用来进行显示类型转换(explict type conversions).
void doSomething(B bOject); //函数 ,接受一个类型为B的对象
B bObj1;
dosomething(bObj1);
B bObj2(28);
domething(28); //错误,DoSomethign应该接受一个B,而不是一个int,而int至B之间并没有隐式转换.
dosomething(B(28));//没问题,使用B构造函数,将int显示转换,为一个B以促成此调用.
被声明为explict的构造函数通常比其non-explict兄弟更受欢迎,因为它们禁止编译器执行非预期的类型转换。除非有一个好理由允许构造函数被用于隐式类型转换,否则会声明为explict。