最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 開(kāi)發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例

 更新時(shí)間:2017年07月19日 14:28:58   作者:liuyi1207164339  
這篇文章主要介紹了C++ 開(kāi)發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例的相關(guān)資料,這里附有實(shí)例代碼和實(shí)現(xiàn)效果圖幫助大家參考實(shí)踐,需要的朋友可以參考下

C++操作符重載

實(shí)現(xiàn)效果圖:

實(shí)例代碼:

Matrix.h

#pragma once 
#include "vector" 
#include "iostream" 
#define rep(i,n) for(int i=1;i<=n;i++) //宏定義for循環(huán),精簡(jiǎn)代碼 
using namespace std; 
class Matrix 
{ 
public: 
  //基本構(gòu)造函數(shù) 
  Matrix(int Row=0, int Column=0); 
  //拷貝構(gòu)造函數(shù)或者復(fù)制構(gòu)造函數(shù) 
  Matrix(const Matrix& matrix); 
  //賦值操作符重載,必須為成員函數(shù),不然會(huì)報(bào)錯(cuò) 
  Matrix& operator=(const Matrix& matrix); 
  //復(fù)合賦值操作符重載,建議重載為成員函數(shù) 
  Matrix& operator+=(const Matrix& matrix); 
  Matrix& operator*=(const Matrix& matrix); 
  Matrix& operator*=(const float& number); 
  Matrix& operator*=(const int& number); 
  Matrix& operator-=(const Matrix& matrix); 
  Matrix& operator/=(const float& number); 
  float& operator[](const size_t& index); 
  Matrix& operator++();//前綴式自增 
  Matrix& operator--();//前綴式自減 
  Matrix operator++(int); //后綴式自增 
  Matrix operator--(int); //后綴式自減 
  //算術(shù)和關(guān)系操作符一般為非成員函數(shù),聲明為友元 
  friend Matrix operator+(const Matrix& matrix1, const Matrix& matrix2); 
  friend Matrix operator-(const Matrix& matrix1, const Matrix& matrix2); 
  friend Matrix operator*(const Matrix& matrix1, const Matrix& matrix2); 
  friend Matrix operator*(const Matrix& matrix1, const float& number); 
  friend Matrix operator*(const Matrix& matrix1, const int& number); 
  friend bool operator==(const Matrix& matrix1, const Matrix& matrix2); 
  friend bool operator!=(const Matrix& matrix1, const Matrix& matrix2); 
  //輸出操作符<<的重載,必須聲明為友元 
  friend ostream& operator<<(ostream& os, const Matrix&object); 
  //輸入操作符>>重載,必須聲明為友元 
  friend istream& operator >>(istream& in,Matrix&object); 
  void Display(); 
  ~Matrix(); 
public: 
  int Row; 
  int Column; 
  vector<vector<float> > data; //二維vector,用于存放矩陣類(lèi)數(shù)據(jù) 
}; 

Matrix.cpp

#include "stdafx.h" 
#include "Matrix.h" 
#include "iomanip" 
//構(gòu)造函數(shù) 
Matrix::Matrix(int Row/* =0 */, int Column/* =0 */){ 
  this->Row = Row; 
  this->Column = Column; 
  data.resize(Row + 1); //申請(qǐng)行數(shù)為row+1,0號(hào)位不用 
  rep(i, Row) 
    data[i].resize(Column + 1); //申請(qǐng)各行的列數(shù) 
  rep(i, Row) 
    rep(j, Column) 
    data[i][j] = 0; //每個(gè)元素初始化為0,方便后面計(jì)算 
} 
//打印函數(shù) 
void Matrix::Display(){ 
  rep(i, Row) 
  { 
    rep(j, Column) 
      cout << setw(8) << data[i][j] << ' '; 
    cout <<endl; 
  } 
} 
//拷貝構(gòu)造函數(shù) 
Matrix::Matrix(const Matrix& matrix){ 
  Row = matrix.Row; 
  Column = matrix.Column; 
  data.resize(Row+1); //申請(qǐng)行數(shù)為row,0號(hào)位不用 
  rep(i, Row) 
    data[i].resize(Column+1); //申請(qǐng)各行的列數(shù) 
  rep(i, Row) 
    rep(j, Column) 
    data[i][j] = matrix.data[i][j]; 
} 
//賦值操作符重載 
Matrix& Matrix::operator=(const Matrix& matrix){ 
  if (this==&matrix) 
  { 
    return *this; 
  } 
  Row = matrix.Row; 
  Column = matrix.Column; 
  //分配資源 
  data.resize(Row + 1); //申請(qǐng)行數(shù)為row+1,0號(hào)位不用 
  rep(i, Row) 
    data[i].resize(Column + 1); //申請(qǐng)各行的列數(shù) 
  rep(i, Row) 
    rep(j, Column) 
    data[i][j] = matrix.data[i][j]; 
  //返回本對(duì)象的引用 
  return *this; 
} 
//復(fù)合賦值操作符重載 
Matrix& Matrix::operator+=(const Matrix& matrix){ 
  if (Row == matrix.Row&&Column == matrix.Column) 
  { 
    rep(i, Row) 
    { 
      rep(j,Column) 
      { 
        data[i][j] += matrix.data[i][j]; 
      } 
    } 
  } 
  return *this; 
} 
Matrix& Matrix::operator-=(const Matrix& matrix){ 
  if (Row == matrix.Row&&Column == matrix.Column) 
  { 
    rep(i, Row) 
    { 
      rep(j, Column) 
      { 
        data[i][j] -= matrix.data[i][j]; 
      } 
    } 
  } 
  return *this; 
} 
Matrix& Matrix::operator*=(const float& number){ 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] = data[i][j] * number; 
    } 
  } 
  return *this; 
} 
Matrix& Matrix::operator*=(const int& number){ 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] = data[i][j] * number; 
    } 
  } 
  return *this; 
} 
Matrix& Matrix::operator*=(const Matrix& matrix){ 
  //先保存矩陣的值 
  Matrix temp(Row, Column); 
  rep(i, temp.Row) 
  { 
    rep(j, temp.Column) 
    { 
      temp.data[i][j] = data[i][j]; 
    } 
  } 
  //改變矩陣的大小和值 
  Column = matrix.Column; 
  data.clear();    //清除數(shù)據(jù) 
  data.resize(Row+1); //申請(qǐng)行數(shù)為row+1,0號(hào)位不用 
  rep(i, Row) 
    data[i].resize(Column+1); //申請(qǐng)各行的列數(shù) 
  //重新給矩陣賦值 
  rep(i, temp.Row) 
  { 
    rep(j, matrix.Column) 
    { 
      double sum = 0; 
      rep(k, temp.Column) 
        sum += temp.data[i][k] * matrix.data[k][j]; 
      data[i][j] = sum; //改變矩陣的值 
    } 
  } 
  return *this; 
} 
Matrix& Matrix::operator/=(const float& number){ 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] = data[i][j] / number; 
    } 
  } 
  return *this; 
} 
//前綴式自增 
Matrix& Matrix::operator++(){ 
  //對(duì)每個(gè)元素都加1 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] +=1; 
    } 
  } 
  return *this; 
} 
//前綴式自減 
Matrix& Matrix::operator--(){ 
  //對(duì)每個(gè)元素都減1 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] -= 1; 
    } 
  } 
  return *this; 
} 
//后綴式自增 
Matrix Matrix::operator++(int){ 
  //拷貝構(gòu)造函數(shù) 
  Matrix ret(*this); 
  //對(duì)每個(gè)元素都加1 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] += 1; 
    } 
  } 
  return ret; 
} 
//后綴式自減 
Matrix Matrix::operator--(int){ 
  //拷貝構(gòu)造函數(shù) 
  Matrix ret(*this); 
  //對(duì)每個(gè)元素都減1 
  rep(i, Row) 
  { 
    rep(j, Column) 
    { 
      data[i][j] -= 1; 
    } 
  } 
  return ret; 
} 
//析構(gòu)函數(shù) 
Matrix::~Matrix() 
{ 
  data.clear(); 
} 
//加法操作符重載 
Matrix operator+(const Matrix& matrix1, const Matrix& matrix2){ 
  Matrix temp(matrix1.Row, matrix1.Column); 
  if (matrix1.Row == matrix2.Row&&matrix1.Column == matrix2.Column) 
  { 
    rep(i, matrix1.Row) 
    { 
      rep(j, matrix2.Column) 
      { 
        temp.data[i][j] = matrix1.data[i][j]+matrix2.data[i][j]; 
      } 
    } 
  } 
  return temp; 
} 
//減法操作符重載 
Matrix operator-(const Matrix& matrix1, const Matrix& matrix2){ 
  Matrix temp(matrix1.Row, matrix1.Column); 
  if (matrix1.Row == matrix2.Row&&matrix1.Column == matrix2.Column) 
  { 
    rep(i, matrix1.Row) 
    { 
      rep(j, matrix2.Column) 
      { 
        temp.data[i][j] = matrix1.data[i][j] - matrix2.data[i][j]; 
      } 
    } 
  } 
  return temp; 
} 
//乘法操作符重載 
Matrix operator*(const Matrix& matrix1, const Matrix& matrix2){ 
  Matrix temp(matrix1.Row, matrix2.Column); 
  rep(i, temp.Row) 
  { 
    rep(j, temp.Column) 
    { 
      double sum = 0; 
      rep(k, matrix1.Column) 
        sum += matrix1.data[i][k] * matrix2.data[k][j]; 
      temp.data[i][j] = sum; 
    } 
  } 
  return temp; 
} 
//乘法操作符重載 
Matrix operator*(const Matrix& matrix1, const float& number){ 
  Matrix temp(matrix1.Row, matrix1.Column); 
  rep(i, temp.Row) 
  { 
    rep(j, temp.Column) 
    { 
      temp.data[i][j] = matrix1.data[i][j]* number; 
    } 
  } 
  return temp; 
} 
//乘法操作符重載 
Matrix operator*(const Matrix& matrix1, const int& number){ 
  Matrix temp(matrix1.Row, matrix1.Column); 
  rep(i, temp.Row) 
  { 
    rep(j, temp.Column) 
    { 
      temp.data[i][j] = matrix1.data[i][j] * number; 
    } 
  } 
  return temp; 
} 
//等于關(guān)系操作符重載 
bool operator==(const Matrix& matrix1, const Matrix& matrix2){ 
  //只有維數(shù)相等才有可比性 
  if (matrix1.Row==matrix2.Row&&matrix1.Column==matrix2.Column) 
  { 
    rep(i, matrix1.Row) 
    { 
      rep(j, matrix1.Column) 
      { 
        if (matrix1.data[i][j]!=matrix2.data[i][j]) 
        { 
          return false; 
        } 
      } 
    } 
    return true; 
  } 
  else 
  { 
    return false; 
  }   
} 
//不等于關(guān)系操作符重載 
bool operator!=(const Matrix& matrix1, const Matrix& matrix2){ 
  //只有維數(shù)相等才有可比性 
  if (matrix1.Row == matrix2.Row&&matrix1.Column == matrix2.Column) 
  { 
    rep(i, matrix1.Row) 
    { 
      rep(j, matrix1.Column) 
      { 
        if (matrix1.data[i][j] != matrix2.data[i][j]) 
        { 
          return true; 
        } 
      } 
    } 
    return false; 
  } 
  else 
  { 
    return false; 
  } 
} 
//輸出操作符重載 
ostream& operator<<(ostream& os, const Matrix&object){ 
 
  rep(i, object.Row) 
  { 
    rep(j, object.Column) 
      os << setw(8) << object.data[i][j] << ' '; 
    os <<endl; 
  } 
  return os; 
} 
//輸入操作符重載 
istream& operator >>(istream& in, Matrix&object){ 
  rep(i, object.Row) 
    rep(j, object.Column) 
    in >> object.data[i][j]; 
  return in; 
} 

main.c

#include "iostream" 
#include "Matrix.h" 
using namespace std; 
int main(){ 
  int row1, row2, col1, col2; 
  cout << "請(qǐng)輸入第一個(gè)矩陣的行和列:\n"; 
  cin >> row1 >> col1; 
  Matrix m1(row1, col1); 
  cout << "請(qǐng)輸入" << row1 << '*' << col1 << "個(gè)數(shù):\n"; 
  cin >> m1; 
  cout << "輸出矩陣的值:\n"; 
  cout << m1; 
  cout << "請(qǐng)輸入第二個(gè)矩陣的行和列:\n"; 
  cin >> row2 >> col2; 
  Matrix m2(row2, col2); 
  cout << "請(qǐng)輸入" << row2 << '*' << col2 << "個(gè)數(shù):\n "; 
  cin >> m2; 
  cout << "輸出矩陣的值:\n"; 
  cout << m2; 
  if (col1 != row2) 
    cout << "這兩個(gè)矩陣無(wú)法相乘\n"; 
  else 
  { 
    cout << "判斷矩陣m1與m2是否相等:\n"; 
    if (m1==m2) 
    { 
      cout << "m1和m2相等:\n"; 
    } 
    else 
    { 
      cout << "m1和m2不相等:\n"; 
    } 
 
    cout << "m1拷貝構(gòu)造m3矩陣結(jié)果輸出:\n"; 
    Matrix m3(m1); 
    cout << m3; 
 
    cout << "m1賦值重載m4矩陣結(jié)果輸出:\n"; 
    Matrix m4(m1.Row,m1.Column); 
    m4 = m1; 
    cout << m4; 
 
    cout << "m1*m2矩陣相乘輸出m5:\n"; 
    Matrix m5(m1.Row, m2.Column); 
    m5 = m1*m2; 
    cout << m5; 
 
    cout << "矩陣m1*2輸出m6:\n"; 
    Matrix m6(m1.Row, m1.Column); 
    m6 = m1*2; 
    cout << m6; 
 
    cout << "矩陣m1*0.5輸出m7:\n"; 
    Matrix m7(m1.Row, m1.Column); 
    m7 = m1 * 0.5; 
    cout << m7; 
 
    cout << "m1*m2矩陣相乘輸出m1:\n"; 
    m1 *= m2; 
    cout << m1; 
 
    cout << "m1矩陣前自增輸出\n"; 
    cout << ++m1; 
 
    cout << "m1矩陣后自增輸出\n"; 
    cout << m1++; 
 
    cout << "m1矩陣輸出\n"; 
    cout << m1; 
 
    cout << "m1矩陣前自減輸出\n"; 
    cout << --m1; 
 
    cout << "m1矩陣后自減輸出\n"; 
    cout << m1--; 
 
    cout << "m1矩陣輸出\n"; 
    cout << m1; 
  } 
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • c++中比較好用的“黑科技”

    c++中比較好用的“黑科技”

    這篇文章主要介紹了c++中比較好用的“黑科技”,一些常用小編沒(méi)有給大家羅列出,主要給大家介紹了sort函數(shù),需要的朋友可以參考下
    2020-02-02
  • 字符串中找出連續(xù)最長(zhǎng)的數(shù)字字符串的實(shí)例代碼

    字符串中找出連續(xù)最長(zhǎng)的數(shù)字字符串的實(shí)例代碼

    這篇文章介紹了字符串中找出連續(xù)最長(zhǎng)的數(shù)字字符串的實(shí)例代碼,有需要的朋友可以參考一下
    2013-09-09
  • C++中的static和const的關(guān)鍵字用法詳解

    C++中的static和const的關(guān)鍵字用法詳解

    這篇文章主要介紹了C++中的static和const的關(guān)鍵字用法詳解,這是一道經(jīng)常在面試中被問(wèn)到的知識(shí),本文給大家詳細(xì)介紹下,需要的朋友可以參考下
    2023-06-06
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 使用C++和代理IP實(shí)現(xiàn)天氣預(yù)報(bào)的采集

    使用C++和代理IP實(shí)現(xiàn)天氣預(yù)報(bào)的采集

    在當(dāng)今的互聯(lián)網(wǎng)時(shí)代,網(wǎng)絡(luò)信息的獲取變得日益重要,天氣預(yù)報(bào)信息作為日常生活的重要參考,其獲取方式也隨著技術(shù)的發(fā)展而不斷變化,在本文中,我們將探討如何使用C++和代理IP來(lái)采集天氣預(yù)報(bào)信息,文中通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 探討:將兩個(gè)鏈表非降序合并為一個(gè)鏈表并依然有序的實(shí)現(xiàn)方法

    探討:將兩個(gè)鏈表非降序合并為一個(gè)鏈表并依然有序的實(shí)現(xiàn)方法

    本篇文章是對(duì)將兩個(gè)鏈表非降序合并為一個(gè)鏈表并依然有序的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Qt使用Quazip解壓縮、壓縮文件的實(shí)現(xiàn)

    Qt使用Quazip解壓縮、壓縮文件的實(shí)現(xiàn)

    Quazip是在zlib基礎(chǔ)上進(jìn)行了簡(jiǎn)單封裝的開(kāi)源庫(kù),利用它可以很方便將單個(gè)或多個(gè)文件打包為zip文件,本文主要介紹了Qt使用Quazip解壓縮、壓縮文件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Qt 實(shí)現(xiàn)鋼筆畫(huà)線效果示例及詳細(xì)原理

    Qt 實(shí)現(xiàn)鋼筆畫(huà)線效果示例及詳細(xì)原理

    這篇文章主要介紹了Qt 實(shí)現(xiàn)鋼筆畫(huà)線效果示例及詳細(xì)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之超級(jí)自定義委托

    Qt數(shù)據(jù)庫(kù)應(yīng)用之超級(jí)自定義委托

    Qt中需要用到自定義委托的情形很多,比如提供下拉框選擇,進(jìn)度條展示下載進(jìn)度啥的,默認(rèn)的單元格是沒(méi)有這些效果的,需要自己?jiǎn)为?dú)用委托的形式來(lái)展示。本文將為大家介紹Qt中如何進(jìn)行超級(jí)自定義委托,需要的可以參考一下
    2022-03-03
  • C語(yǔ)言編程函數(shù)指針入門(mén)精講教程

    C語(yǔ)言編程函數(shù)指針入門(mén)精講教程

    大家在C語(yǔ)言的學(xué)習(xí)中一定會(huì)接觸指針這樣一個(gè)東西,而指針也是新手路上一定要消滅的boss,如果以后還要學(xué)習(xí)Java的同學(xué)更是要注重指針的學(xué)習(xí),希望能夠有所幫助
    2021-10-10

最新評(píng)論

乌鲁木齐市| 贞丰县| 长宁区| 常山县| 马尔康县| 乳山市| 营口市| 安图县| 太康县| 渝中区| 平泉县| 天津市| 吐鲁番市| 东乌珠穆沁旗| 湘阴县| 乃东县| 扶沟县| 济南市| 兰溪市| 淳安县| 霍州市| 贵定县| 甘孜县| 原阳县| 安庆市| 噶尔县| 宜章县| 平定县| 台江县| 太和县| 麻江县| 永春县| 沾益县| 安吉县| 马鞍山市| 千阳县| 上高县| 清涧县| 阿瓦提县| 南安市| 双柏县|