C++中使用转换构造函数和运算符重载时需要注意的问题
来源:互联网 发布:华美淘宝客卷皮7.0 编辑:程序博客网 时间:2024/05/21 10:44
作为一个c++初学者,今天在学习这部分时,自己动手敲代码的时候发现同时使用转换构造函数和运算符重载时,运算符重载函数的形参不能为引用,刚开始没注意到这个问题,编译一直不通过,debug了好半天才发现问题出在引用那里。。。
对于不涉及到数据类型转换的问题,我们使用运算符重载时一般将运算符重载函数的形参设置为对象的引用,可以减少时间和空间的开销,同时可以借助虚实结合通过引用改变实参的值。但是,当在使用运算符重载的同时,要使用转换构造函数(如Complex(double r){real=r;imag=0;})和类型转换函数(operator 类型名(){}),运算符重载函数的形参就不能使用引用,否则无法完成数据转换,编译不通过。
#include <iostream>using namespace std;class Complex{public: Complex( ){real=0;imag=0;} //默认构造函数 Complex(double r){real=r;imag=0;}//转换构造函数 Complex(double r,double i){real=r;imag=i;}//实现初始化的构造函数 **friend Complex operator + (Complex c1,Complex c2)**; //重载运算符“+”的友元函数 void display( );private: double real; double imag;};**Complex operator + (Complex c1,Complex c2)**//定义运算符“+”重载函数{ return Complex(c1.real+c2.real, c1.imag+c2.imag);}void Complex::display( ){ cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main( ){ Complex c1(3,4),c2(5,-10),c3; c3=c1+2.5; //复数与double数据相加 c3.display( ); return 0;}
如果把Complex operator + (Complex c1,Complex c2)中的c1,c2前加入引用符号&,编译出现错误
1 0
- C++中使用转换构造函数和运算符重载时需要注意的问题
- 【C++】复制构造函数(拷贝构造函数)和=运算符重载使用的区别
- c/c++中如何写结构体的 构造函数 和 重载运算符?
- 运算符重载需要注意的事项
- [C++]拷贝构造函数和赋值运算符重载
- C++ 构造函数和运算符重载
- 对象隐式转换,复制构造函数和重载等号运算符的区别
- JS中使用短路运算符(&& || & |)时需要注意的小问题
- C++——转换构造函数和转换运算符
- c/c++ 构造函数、拷贝构造函数、析构函数和赋值运算符重载
- 重载及运算符重载需要注意的地方
- 拷贝构造函数和赋值运算符的重载的调用次数问题
- C++赋值构造函数和赋值运算符的重载
- 类的赋值运算符重载和拷贝构造函数
- 复制构造函数和=运算符重载的区别
- 拷贝构造和赋值运算符函数的重载
- C++中关于拷贝构造函数和重载赋值运算符的一些体会
- c++中,一个没有拷贝构造函数和重载=运算符的string类,
- 链表的删除功能
- 多线程的常见操作
- Not Exists的使用方法
- 数据库基本概念
- NOIP2016 CQ_round 6游记
- C++中使用转换构造函数和运算符重载时需要注意的问题
- 【HDU】5957 Query on a graph【分类讨论+bfs序线段树】
- Java WebService 简单实例
- 交换算法
- Linux图形环境下pycharm的开发环境搭建方案分享
- druid数据库连接池
- 简单的队列操作但是在运行的时候就会有越界
- 从ActionBar,沉浸式 再到ToolBar
- 建筑业黑客马拉松 —— 一场致力于中国建筑业先锋软硬件技术的创新风暴