找工作之Effective C++

1、 尽量以const,enum,inline替换#define
2、 Const出现在星号左边,表明指物是常量;出现在星号右边,指针是常量。
3、 Mutable修辞可以突破const限制,在被const修辞的函数里面也能被修改
4、 运用const成员函数实现non-const版本可以避免代码重复
5、 const对象只能调用const成员函数,在const成员函数中修改const对象数据和调用非const成员变量都是不允许的
6、 为驳回编译器自动提供的功能,可以将相应的成员函数声明为private并且不予以实现
7、 为多态基类声明virtual析构函数
8、 为了保证代码的异常安全性,应该避免在析构函数中抛出异常
9、 绝不在构造和析构过程中调用virtual函数
10、 确定public继承塑模出is-a关系,通过复合塑模出has-a关系
11、 宁以pass-by-reference-to-const替换pass-by-value
12、 避免遮掩继承而来的名称(用using进行声明:using Base::mf1)
13、 绝不重新定义继承而来的non-virtual函数(如果子类有自己的版本,由于是静态绑定,编译时就已经确定,基类指针指向子类对象时,此时只会调用基类的版本,调用的版本取决于指针的类型)。
14、 绝不重新定义继承而来的缺省参数值,缺省参数值静态绑定,virtual函数动态绑定
class shape{
public:
enum Shapecolor{Red,Green,Blue};
virtual void draw(Shapecolor color=Red) const=0;
}
class rectangle{
public:
virtual void draw(Shapecolor color=Green) const; //错误
}
15、如果是public继承,则可以将派生类对象转换成基类对象;
如果是private和protected继承,则不能将派生类对象转换为基类对象。
private继承是一种实现继承
16、c++中子类可以继承父类的private成员,但不能直接访问(可通过函数接口访问)
class A
{
public:
int GetValue()
{
return m_i;
}

private:
int m_i;
};
class B: public A
{
};
B b;
int Val = b.GetValue();
17、静态函数:函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。且如果static int func(….)不是出现在类中,则它不是一个静态成员函数,只是一个普通的全局函数,只不过由于 static 的限制,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。
因为编译器把涉及静态数据成员的使用,都转换为直接使用,而静态成员在class中声明,外部无法看见。故需要在外部进行定义,使其后的代码可见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值