欢迎来到天天文库
浏览记录
ID:15218078
大小:250.50 KB
页数:16页
时间:2018-08-02
《effective c++笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1)default构造函数要不没有参数,要不每个参数都有缺省的值例子:classA{public:A();//default构造函数};classB{public:explicitB(intx=0,boolb=true);//defualt构造函数,同时禁止隐式初始化};classC{explicitC(intx);//不是default构造函数}----------------------------------------------------------------------------
2、----------------------------------------------voiddoSomething(Bobject);doSometing(28);//错误,这里不会隐式的自动转化doSomething(B(28));//正确,显式的进行转化,同时函数的第二个参数为缺省值trueNOTE:构造函数前加上关键字explicit表示阻止该构造函数用来执行隐式类型的初始化(implicittypeconversions),但是它们仍可被用来进行显示类型转化(explicittyp
3、econversions).2)copy构造函数copy构造函数:以同类型对象初始化自我对象copyassignment操作符:从另一个同类型的对象中拷贝其值到自我对象例子:classWidget{public:Widget();//default构造函数Widget(constWidget&rhs);//拷贝构造函数Widget&operator=(constWidget&rhs);//copyassignment操作符(=)};Widgetw1;//新对象被定义Widgetw2(w1);W1=
4、w2;//调用copyassignmentWidgetw3=w2;//调用copy构造函数NOTE1:如果一个新对象被定义,则一定会有个构造函数被调用(缺省的或是拷贝构造函数或者是带参的构造函数)NOTE2:byvalue(传值)的时候也会调用拷贝构造函数(函数的参数或是返回值)BoolhasAcceptable(Widgetw);…..WidgetaWidget;If(hasAcceptable(aWidget))…//一般情况以Pass-by-reference-to-const传递用户自定义
5、类型3)函数对象(functionobjects)“行为像函数”的对象,这样的对象来自于重载operator()的classes1)命名习惯例子:Rationala,b;a*b;a)non-memberoperator*函数的声明:constRationaloperator*(constRational&lhs,constRational&rhs);note:lhs->lefthandsiderhs->righthandsideb)成员函数声明:左侧的实参由指针this表现出来了constRati
6、onaloperator*(constRational&rhs);条款一:面向对象形式:构造函数,析构函数,封装,继承,多态,virtual函数,动态绑定),泛型形式(generic),元编程形式(metaprogramming),templateC++STL:容器,迭代器,算法,函数对象异常,重载条款二:define可以使用const,enum,inline替代1)Class的专属常量例子:.h文件-------------------------------------------------
7、--------------------------classGamePlayer{private:staticconstintNumTurns=5;//class的专属常量enum{NumTurns=5};//theenumhackstaticconstdoubleNumTurns2;//staticclass常量声明intscores[NumTurns];}.c文件-----------------------------------------------------------------
8、----------constintGamePlayer::NumTurns;//定义,只有想取class专属常量地址时才需要这个定义constdoubleGamePlayer::NumTurns2=3.12;//staticclass常量定义2)#define并不重视作用域(scope),一旦宏被定义,它就在其后的整个编译过程中有效,除非在某处被#undef.3)以a和b中较大的值调用f#defineCALL_WITH_MAX(a,b)f((a)>(b)?(a):(b))//存在
此文档下载收益归作者所有