上海闵行网站建设,站长工具seo词语排名,校园网站安全建设方案,滕州住房和城乡建设局网站目录概述例子注意问题概述
运算符重载是函数一个特殊情况#xff0c;重载的运算符视为特殊的函数#xff0c;称为运算符函数。 编译系统能依据使用运算符的不同环境#xff0c;即参数#xff08;操作数#xff09;的数量或类型的差异#xff0c;区分同一运算符的不同含义…
目录概述例子注意问题概述
运算符重载是函数一个特殊情况重载的运算符视为特殊的函数称为运算符函数。 编译系统能依据使用运算符的不同环境即参数操作数的数量或类型的差异区分同一运算符的不同含义。 运算符重载针对原有运算符进行不能通过重载创造出新的运算符。 除了.、.*、-*、::、?:外其他 运算符都可以重载。 不能为重载的运算符函数设置默认值在调用时不能省略实参。 除了new和delete这两个较为特殊的运算符外任何运算符作为成员函数重载时不得重载为静态成员函数。
、[]、()、-以及所有类型转换运算符只可以做为成员函数重载不能针对 枚举类型操作数进行重载 运算符函数的函数名由运算符前加关键字operator构成在声明运算符或调用运算符时都可以用这个名字。
例子
比如 某类的成员函数重载了二元运算符
a.operator (b);
a(b);非成员函数重载了
operator (a,b);
ab;一元运算符情况
a.operator - ();
-c;非成员函数
operator - (c);
-c;成员函数重载第一操作数是对象本身有this指针所以不出现在形参表中。 而非成员函数没有this指针所以对象本身也要出现在形参表中。
注意问题
1、重载的运算符应保持其原有的基本语义 2、重载的运算符应尽可能保持其原有的特性 是否要求第一操作数为有左值操作数。 是否修改第一操作数 操作结果是否为有左值数据 保证不改变第二操作数 3、运算符之间的关系密切有某种逻辑上的联系因此若需要重载其中的某一个就意味着同组的其他运算符也需要重载。 4、使用引用参数还是非引用参数 5、作为成员函数重载还是作为非成员函数重载