第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

求指教模板 +和+=運(yùn)算符重載的問(wèn)題,具體內(nèi)容如下~

求指教模板 +和+=運(yùn)算符重載的問(wèn)題,具體內(nèi)容如下~

一只萌萌小番薯 2021-12-31 10:06:23
#define MATRIX_H#include<iostream>using namespace std;template <typename T>class Matrix{template <typename T>friend ostream & operator<<(ostream & os,const Matrix<T> & ma);template <typename T>friend 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 = ( Matrix<T> & mt);/*operator+operator+=operator=*/private:int m,n;T * * ptr;};template <typename T>Matrix<T>::Matrix(int x,int y){m=x,n=y;ptr=new T *[m];for(int i=0;i<m;i++)ptr[i]=new T[n];if(ptr==NULL){cout<<"內(nèi)存空間不足!"<<endl;exit(-1);}}template <typename T>Matrix<T>::Matrix(const Matrix & mt){m=mt.m;n=mt.n;ptr=new T *[m];for(int i=0;i<m;i++)ptr[i]=new T[n];for(int i=0;i<m;i++)for(int j=0;j<n;j++)ptr[i][j]=mt.ptr[i][j];}template <typename T>Matrix<T>::~Matrix(){for(int i=0;i<m;i++)delete [] ptr[i];delete [] ptr;}template <typename T>ostream & operator<<(ostream & os,const Matrix<T> & ma){for(int i=0;i<ma.m;i++){for(int j=0;j<ma.n;j++)os<<ma.ptr[i][j]<<"\t";os<<endl;}return os;}template <typename T>istream & operator>>(istream & is,Matrix<T> & ma){for(int i=0;i<ma.m;i++){cout<<"請(qǐng)輸入第"<<i+1<<"行"<<ma.n<<"元素:";for(int j=0;j<ma.n;j++)is>>ma.ptr[i][j];}return is;}template <typename T>Matrix<T> operator + (Matrix<T> & mt1,Matrix<T> & mt2){Matrix tmp[i][j];for(int i=0;i<mt.m;i++)for(int j=0;j<mt.n;j++)tmp[i][j]=mt1.ptr[i][j]+mt2.ptr[i][j];return tmp[i][j];}template <typename T>Matrix<T> & operator += (Matrix<T> & mt1,Matrix<T> & mt2){for(int i=0;i<mt.m;i++)for(int j=0;j<mt.n;j++)mt1.ptr[i][j]+=mt2.ptr[i][j];return mt1.ptr[i][j];}template <typename T>Matrix<T> Matrix<T>::operator = ( Matrix<T> & mt){m=mt.m;n=mt.n;for(int i=0;i<mt.m;i++)for(int j=0;j<mt.n;j++)ptr[i][j]=mt.ptr[i][j];return *this;}
查看完整描述

1 回答

?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

#include <cstdlib>
#include<iostream>
using namespace std;

template <typename T>
class Matrix{
template <typename T>
friend ostream & operator<<(ostream & os,const Matrix<T> & ma);//輸出
template <typename T>
friend istream & operator>>(istream & is,Matrix<T> & ma);//輸入
public:
Matrix(int x=0,int y=0);//默認(rèn)構(gòu)造函數(shù)
Matrix(const Matrix & mt);//復(fù)制構(gòu)造函數(shù)
~Matrix();//析構(gòu)函數(shù)
//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.cpp"
template <typename T>
ostream & operator<<(ostream & os,const Matrix<T> & ma){
for(int i=0;i<ma.m;i++){
for(int j=0;j<ma.n;j++)
os<<ma.ptr[i][j]<<"\t";
os<<endl;
}
return os;
}
template <typename T>
istream & operator>>(istream & is,Matrix<T> & ma){
for(int i=0;i<ma.m;i++){
cout<<"請(qǐng)輸入第"<<i+1<<"行"<<ma.n<<"元素:";
for(int j=0;j<ma.n;j++)
is>>ma.ptr[i][j];
}
return is;
}
/*template <typename T>//友元形式+操作符
Matrix<T> operator + (Matrix<T> & mt1,Matrix<T> & mt2)
{
Matrix tmp[i][j];
for(int i=0;i<mt.m;i++)
for(int j=0;j<mt.n;j++)
tmp[i][j]=mt1.ptr[i][j]+mt2.ptr[i][j];
return tmp[i][j];
}
template <typename T>//友元形式+=操作符
Matrix<T> & operator += (Matrix<T> & mt1,Matrix<T> & mt2)
{
for(int i=0;i<mt.m;i++)
for(int j=0;j<mt.n;j++)
mt1.ptr[i][j]+=mt2.ptr[i][j];
return mt1.ptr[i][j];
}*/

int main(){
Matrix<int> am,bm;
bm = am;
bm = am + bm;
bm += am;
return 0;
}

//dw.cpp
template <typename T>
Matrix<T>::Matrix(int x,int y){
m=x,n=y;
ptr=new T* [m];
for(int i=0;i<m;i++)
ptr[i]=new T[n];
if(ptr==NULL){
cout<<"內(nèi)存空間不足!"<<endl;
exit(-1);
}
}
template <typename T>
Matrix<T>::Matrix(const Matrix & mt){
m=mt.m;
n=mt.n;
ptr=new T *[m];
for(int i=0;i<m;i++)
ptr[i]=new T[n];

for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
ptr[i][j]=mt.ptr[i][j];
}
template <typename T>
Matrix<T>::~Matrix(){
for(int i=0;i<m;i++)
delete [] ptr[i];
delete [] ptr;
}
template <typename T>//重載 = 操作符
Matrix<T>& Matrix<T>::operator = (const Matrix<T>& mt)
{
m=mt.m;
n=mt.n;
for(int i=0;i<mt.m;i++)
for(int j=0;j<mt.n;j++)
ptr[i][j]=mt.ptr[i][j];
return *this;
}
template<typename T>//重載+操作符
Matrix<T>& Matrix<T>::operator +(const Matrix<T>& mt)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
ptr[i][j]=ptr[i][j]+mt.ptr[i][j];
return *this;
}

template<typename T>//重載+=操作符
Matrix<T>& Matrix<T>::operator+= (const Matrix<T>& mt)
{
*this = *this + mt;
return *this;
}

注:由于我的編譯器的問(wèn)題,模板類(lèi)的實(shí)現(xiàn)文件不能包含在project里,所以另行定義,我已經(jīng)將友元形式全部注掉,在main函數(shù)里測(cè)試的是模板內(nèi)重載的操作符,通過(guò)編譯,C++規(guī)定,在類(lèi)內(nèi)重載操作符,形參表內(nèi)至少要包含一個(gè)該類(lèi)型的對(duì)象



查看完整回答
反對(duì) 回復(fù) 2022-01-03
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)