最近看了菜鳥教程里的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, j, 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, j, k);
}
chongzai operator++(int) //后置++的特殊格式
{
i++;
j++;
k++;
return chongzai(i, j, k);
}
/*************************************************************************************************/
/*
賦值運算符重載:
賦值運算符( = ),比如拷貝構造函數
*/
void operator=(const chongzai& A) //以拷貝構造函數為例
{
i = A.i;
j = A.j;
k = A.k;
}
/*************************************************************************************************/
/*
函數調用運算符重載:
函數調用運算符 () 可以被重載用于類的對象。
當重載 () 時,您不是創造了一種新的調用函數的方式,
相反地,這是創建一個可以傳遞任意數目參數的運算符函數。
*/
chongzai operator()(int a, int b, 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++運算符重載內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。