Effective C++学习笔记(一)

设计上的讨论集中于“如何在两个不同的做法中择一完成某项任务”,你该选择继承还是模板?选择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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值