ZKX's LAB

类模板中运算符的重载 类模板和运算符重载一起使用

2021-04-06知识3

试补充完成类numCal的定义 (注意:所有运算符的重载都必须符合运算符原本的语义,比如++A是“先加后使用 有几处问题:includeincludeusing namespace std;class numCal {public:numCal(int[],int);构造函数,形参分别是整形数组、数组长度numCal(const numCal&);拷贝构造函数numCal();int sum();numCal&operator=(const numCal&);numCal&operator+();前序+运算符重载,使得+A后,A.arr的每个元素值加1numCal operator+(int);后序+运算符重载,使得A+后,A.arr的每个元素值加1。private:int size;int*arr;};numCal:numCal(int a[],int s){size=s;arr=new int[size];arr=a;这仅仅是个指针赋值,并没有深层的数据拷贝,同时会发生泄漏for(int i=0;i;i+){arr[i]=a[i];}}numCal:numCal(const numCal&n){delete[]arr;既然是构造,那arr还没有分配空间,所以不能deletesize=n.size;arr=new int[size];arr=n.arr;同上,这仅仅是个指针赋值for(int i=0;i;i+){arr[i]=n.arr[i];}}numCal:~numCal(){delete[]arr;}numCal&numCal:operator=(const numCal&n){size=n.size;delete[]arr;是赋值,那么就有原来的空间,要先释放原来的(因为没有默认构造函数,所以arr必然有效)arr=new int[n.size];arr=n.arr;同上for(int i=0;i;i+){arr[i]=n.arr[i];}。

求指教模板 +和+=运算符重载 #includeincludeusing namespace std;templateclass Matrix{templatefriend ostream&operator(ostream&os,const Matrix<;T>;&ma);输出templatefriend istream&operator>;>;(istream&is,Matrix<;T>;&ma);输入public:Matrix(int x=0,int y=0);默认构造函数Matrix(const Matrix&mt);复制构造函数Matrix();析构函数friend Matrix<;T>;&operator+(Matrix<;T>;&mt1,Matrix<;T>;&mt2);友元形式+操作符friend Matrix<;T>;&operator+(Matrix<;T>;&mt1,Matrix<;T>;&mt2);友元形式+操作符Matrix&operator=(const Matrix<;T>;&mt);重载赋值操作符Matrix&operator+(const Matrix<;T>;&mt);重载+操作符Matrix&operator+(const Matrix<;T>;&mt);重载+操作符private:int m,n;T*ptr;};include\"dw.cpptemplateostream&operator(ostream&os,const Matrix<;T>;&ma){for(int i=0;i;i+){for(int j=0;j;j+)os[i][j];os;}return os;}templateistream&operator>;>;(istream&is,Matrix<;T>;&ma){for(int i=0;i;i+){cout请输入第\"行\"元素:;for(int j=0;j;j+)is>;>;ma.ptr[i][j];}return is;}template<;typename T>;/友元形式+操作符Matrix<;T>;operator+(Matrix<;T>;&mt1,Matrix<;T>;&mt2){Matrix tmp[i。

类外定义运算符重载函数时为什么双写类名 这个不叫类外定义,这个是类成员函数百operator+的实现,Complex:只是指定了成员函数所属类名。类外定度义的运算符重载是类似于:Complex&operator=(Complex&c1,Complex&c2){return c1;}Complex&operator(Complex&c1,Complex&c2){return c1;}这样。因为类外函数没有this指针,所以要写两个参数,c1为运算符左版边的参数。特别的:如果类外运算符函数要访问类中非public成员,在权类中要将类外函数声明为友元函数

#类模板和运算符重载一起使用

随机阅读

qrcode
访问手机版