1. 程式人生 > 程式設計 >C++運算子過載例項程式碼詳解(除錯環境 Visual Studio 2019)

C++運算子過載例項程式碼詳解(除錯環境 Visual Studio 2019)

最近看了菜鳥教程裡的C++教程

遇到很多運算子過載,為了方便我的學習,我把這些總結了一下
如有錯誤(包括之前的博文)請評論留言,謝謝!

由於程式碼裡註釋的很清楚,我就不做過多的解釋了。

下面是這次總結的標頭檔案,用來放置一些類和方法。

//C++運算子過載例項.h
#pragma once
#include <iostream>
using namespace std;
class chongzai
{
private:
 int i,j,k;
public:
 chongzai()
 {
 i = 0;
 j = 0;
 k = 0;
 }
 chongzai(int a,int b,int c)
 {
 i = a;
 j = b;
 k = c;
 }
 //以下分別為A1,A2,A3的顯示函式
 void display1()
 {
 cout << "A1:" << endl;
 cout << "i=" << i << endl;
 cout << "j=" << j << endl;
 cout << "k=" << k << endl;
 cout << "------------------" << endl;
 }
 void display2()
 {
 cout << "A2:" << endl;
 cout << "i=" << i << endl;
 cout << "j=" << j << endl;
 cout << "k=" << k << endl;
 cout << "------------------" << endl;
 }
 void display3()
 {
 cout << "A3:" << endl;
 cout << "i=" << i << endl;
 cout << "j=" << j << endl;
 cout << "k=" << k << endl;
 cout << "------------------" << endl;
 }
 /*************************************************************************************************/
 /*
 一元運算子過載:
 遞增運算子( ++ )和遞減運算子( -- )
 一元減運算子,即負號( - )
 邏輯非運算子( ! )
 */
 chongzai operator-()   //以負號( - )為例
 {
 i = -i;
 j = -j;
 k = -k;
 return chongzai(i,k);
 }
 /*************************************************************************************************/
 /*
 二元運算子過載:
 二元運算子需要兩個引數
 加運算子( + ),減運算子( - ),乘運算子( * )和除運算子( / )
 */
 chongzai operator+(const chongzai& n) //以加號( + )為例
 {
 chongzai A;
 A.i = this->i + n.i;
 A.j = this->j + n.j;
 A.k = this->k + n.k;
 return A;
 }
 /**********************************************************************************************/
 /*
 關係運算符過載:
 大於( > ),小於( < ),大於等於( >= ),小於等於( <= ),等於( = )等
 */
 bool operator<(const chongzai& n)  //以小於號( < )為例
 {
 if (i < n.i)
  return true;
 if (i >= n.i)
  return false;
 return false;
 }
 /**********************************************************************************************/
 /*
 輸入輸出運算子過載:
 流提取運算子 >> 和流插入運算子 <<
 使用友元函式無需設定物件,而且符合人們cout<<和cin>>的書寫習慣
 */
 friend ostream& operator<<(ostream& output,const chongzai& A)
 {
 output << "i:" << A.i << endl;
 output << "j:" << A.j << endl;
 output << "k:" << A.k << endl;
 output << "------------------" << endl;
 return output;
 }
 friend istream& operator>>(istream& input,chongzai& A)
 {
 input >> A.i >> A.j >> A.k;
 return input;
 }
 /*************************************************************************************************/
 /*
 ++和--運算子過載:
 包括前置和後置
 */
 chongzai operator++()   //以前置++為例
 {
 ++i;
 ++j;
 ++k;
 return chongzai(i,k);
 }
 chongzai operator++(int)   //後置++的特殊格式
 {
 i++;
 j++;
 k++;
 return chongzai(i,k);
 }
 /*************************************************************************************************/
 /*
 賦值運算子過載:
 賦值運算子( = ),比如拷貝建構函式
 */
 void operator=(const chongzai& A)  //以拷貝建構函式為例
 {
 i = A.i;
 j = A.j;
 k = A.k;
 }
 /*************************************************************************************************/
 /*
 函式呼叫運算子過載:
 函式呼叫運算子 () 可以被過載用於類的物件。
 當過載 () 時,您不是創造了一種新的呼叫函式的方式,
 相反地,這是建立一個可以傳遞任意數目引數的運算子函式。
 */
 chongzai operator()(int a,int c)
 {
 chongzai A;
 //利用()裡的引數進行各種運算
 A.i = a + b;
 A.j = b + c;
 A.k = a + c;
 return A;
 }
};
class chongzai2
{
private:
 int arr[5];
public:
 int n;
 chongzai2()
 {
 for (n = 0; n < 5; n++)
 {
  arr[n] = n;
 }
 }
 /*************************************************************************************************/
 /*
 下標運算子[]過載:
 */
 int& operator[](int n)
 {
 if (n >= 5)
 {
  cout << "索引超過最大值" << endl;
  return arr[0];
 }
 return arr[n];
 }
};

然後這是主程式

//C++運算子過載例項.cpp
#include "標頭.h"
#include <iostream>
using namespace std;

int main()
{
 chongzai A1(10,20,30),A2(100,200,300),A3;
 -A1;     //一元運算子過載
 A1.display1();
 A3 = A1 + A2;    //二元運算子過載
 A3.display3();
 if (A1 < A2)    //關係運算符過載
 cout << "D1<D2" << endl << endl;
 else
 cout << "D1>=D2" << endl << endl;
 cout << "請輸入A3的各項引數:" << endl; //輸入輸出元算符過載
 cin >> A3;
 cout << "A3的各項引數為:" << endl;
 cout << A3;
 ++A1;     //前置++運算子過載
 A1.display1();
 A1++;     //後置++運算子過載
 A1.display1();
 A1 = A2;     //賦值運算子過載
 A1.display1();
 A2 = A3(2,4,6);    //函式呼叫運算子()過載
 A2.display2();
 chongzai2 B;
 cout << "B[4]的值為:" << B[4] << endl;
 cout << "B[5]的值為:" << B[5] << endl; //下標運算子[]過載
 return 0;
}

在輸入A3的時候,舉個例子,輸入1 2 3

輸出結果為

在這裡插入圖片描述

總結

到此這篇關於C++運算子過載例項(除錯環境 Visual Studio 2019)的文章就介紹到這了,更多相關C++運算子過載內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!