运算符重载为成员函数时,会省略一个参数,如果无参数,表明是一元运算符。一元运算符即可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。重载不能改变运算符对象的个数;不能改变运算符的优先级别;不能改变运算符的结合性;重载运算符的函数不能有默认值,否则...
分类:
其他好文 时间:
2015-04-01 21:44:14
阅读次数:
117
RAII,也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。例如,我们无需直接调用一对非成员函数OpenPort/ClosePo...
分类:
其他好文 时间:
2015-03-20 23:40:51
阅读次数:
281
virtual函数的替代方案包括NVI手法及Strategy设计模式的多种手法。NVI手法自身是一个特殊形式的Template Method设计模式。将机能从成员函数移到class外部函数,带来的一个缺点是,非成员函数无法访问class的non-public成员。tr1::function对象的行为...
分类:
编程语言 时间:
2015-03-20 12:33:46
阅读次数:
184
条款46需要类型转换时请为模板定义非成员函数
条款47请使用traits class表现类型信息条款...
分类:
编程语言 时间:
2015-03-13 22:21:38
阅读次数:
248
第14章 操作重载与类型转换
1. 可以直接调用重载的运算符函数.
但是如果对于一个运算符比如+号,既有重载的成员函数,又有重载的非成员函数,那么此时如果直接使用+号,那么就会出现错误.
因为编译器不知道要调用那个运算符.
2. 逗号,运算符
逻辑与&&运算符
逻辑或||运算符不建议重载.
因为上述3种运算符本身是有求值顺序和短路求值特性...
分类:
编程语言 时间:
2015-03-10 10:31:07
阅读次数:
183
什么函数不能声明为虚函数?
一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。
但设置虚函数须注意:
1:只有类的成员函数才能说明为虚函数;
原因:普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。
2:静态成员函数不能是虚函数;
因为static属于class自己的,也必须有实体...
分类:
其他好文 时间:
2015-01-27 09:32:17
阅读次数:
181
The Decision between Member and Non-memberThe binary operators=(assignment),[](array subscription),->(member access), as well as the n-ary()(function ...
分类:
编程语言 时间:
2015-01-16 16:30:37
阅读次数:
223
1:一般将算术,关系操作符定义为非成员函数,而赋值操作定义为成员函数 2:|| &&以及,3个操作符一般不重载,破坏其求值顺序; 3:= [] () –> 操作符是必须为成员的 4:+= 等复合一般成员而非强制 5: ++ --等作为成员,而对称操作符为非成员,例如 + – / * == != >=...
分类:
其他好文 时间:
2014-11-21 16:08:11
阅读次数:
193
C++编译错误cannot have cv-qualifier在C++中CV指const和volatile两个keyword。有两种情况不能使用CV限定。一、非成员函数不能含有CV限定,即const和volatile限定#include using namespace std;double getA...
分类:
编程语言 时间:
2014-11-06 19:05:49
阅读次数:
244
问题的提出:我们已知道类具备封装和信息隐 藏的特性。只有类的成员函数才能访问类的私有成员,程式中的其他函数是无法访问私有成员的。非成员函数能够访问类中的公有成员,但是假如将数据成员都定义 为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型...
分类:
编程语言 时间:
2014-10-18 12:28:31
阅读次数:
188