欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++運算符重載的詳細講解

 更新時間:2021年04月07日 10:00:50   作者:Thrush''''s note  
這篇文章主要給大家介紹了關于C++運算符重載的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

加號運算符重載

對于內(nèi)置數(shù)據(jù)類型,編譯器知道如何運算

但是對于自己封裝的類,編譯器無法進行運算

這時可以通過自己定義運算符重載進行運算

operator+

通過成員函數(shù)重載+號

#include<iostream>
using namespace std;
class Person
{
public:
 int m_a;
 int m_b;
 //通過成員函數(shù)實現(xiàn)重載
 Person operator+ (Person &p)
 {
 //創(chuàng)建一個臨時變量
 Person temp;
 temp.m_a = this->m_a + p.m_a;
 temp.m_b = this->m_b + p.m_b;
 return temp;
 }
};
void test01()
{
 Person p1;
 p1.m_a = 66;
 p1.m_b = 44;
 Person p2;
 p2.m_a = 6;
 p2.m_b = 4;
 Person p3;
 //通過函數(shù)原型調用
 p3 = p1.operator+(p2);
 //簡便調用
 //p3 = p1 + p2;
 cout << "p3.m_a:" << p3.m_a << endl;
 cout << "p3.m_b:" << p3.m_b << endl;
}

int main()
{
 test01();
 system("pause");
 return 0;
}

注意兩種調用方式

通過函數(shù)原型調用

p3 = p1.operator+(p2);

簡便調用

p3 = p1 + p2;

通過全局函數(shù)重載+號

#include<iostream>
using namespace std;
class Person
{
public:
 int m_a;
 int m_b;
};
//通過全局函數(shù)實現(xiàn)重載
Person operator+ (Person& p1, Person& p2)
{
 //創(chuàng)建一個臨時變量
 Person temp;
 temp.m_a = p1.m_a + p2.m_a;
 temp.m_b = p1.m_b + p2.m_b;
 return temp;
}
void test01()
{
 Person p1;
 p1.m_a = 66;
 p1.m_b = 44;
 Person p2;
 p2.m_a = 6;
 p2.m_b = 4;
 Person p3;
 //函數(shù)原型調用
 p3 = operator+(p1,p2);
 //簡便調用
 //p3 = p1 + p2;
 cout << "p3.m_a:" << p3.m_a << endl;
 cout << "p3.m_b:" << p3.m_b << endl;
}
int main()
{
 test01();
 system("pause");
 return 0;
}

注意兩種調用方式

通過函數(shù)原型調用

p3 = operator+(p1,p2);

簡便調用

p3 = p1 + p2;

運算符重載發(fā)生函數(shù)重載

運算符重載可以發(fā)生函數(shù)重載:Person+int等等

#include<iostream>
using namespace std;
class Person
{
public:
 int m_a;
 int m_b;
};
//通過全局函數(shù)實現(xiàn)重載
Person operator+ (Person& p1, int num)
{
 //創(chuàng)建一個臨時變量
 Person temp;
 temp.m_a = p1.m_a + num;
 temp.m_b = p1.m_b + num;
 return temp;
}
void test01()
{
 Person p1;
 p1.m_a = 66;
 p1.m_b = 44;
 Person p2;
 p2.m_a = 6;
 p2.m_b = 4;
 Person p3;
 //函數(shù)原型調用
 //p3 = operator+(p1,55);
 //簡便調用
 p3 = p1 + 55;
 cout << "p3.m_a:" << p3.m_a << endl;
 cout << "p3.m_b:" << p3.m_b << endl;
}
int main()
{
 test01();
 system("pause");
 return 0;
}

調用方法和定義方法與上面相同,不再多余贅述

總結

1、系統(tǒng)內(nèi)置數(shù)據(jù)類型的表達式不可改變

2、不要濫用運算符重載

左移運算符

不利用成員函數(shù)重載左移運算符

沒有具體演示,因為報錯,我也沒寫出來

下面通過全局函數(shù)實現(xiàn)

#include<iostream>
using namespace std;
class Person
{
public:
 int m_a;
 int m_b;
 
};
ostream& operator<<(ostream& cout,Person&p)
{
 cout << "p.m_a=" <<p. m_a << " p.m_b=" <<p. m_b << endl;
 return cout;
}
void test01()
{
 Person p1;
 p1.m_a = 44;
 p1.m_b = 66;
 cout << p1 << endl;
}
int main()
{
 test01();
 system("pause");
 return 0;
}

因為要實現(xiàn)鏈式,實現(xiàn)追加,所以返回值必須是ostream

總結

配合友元實現(xiàn)自定義輸出類型

遞增運算符重載

遞增運算符重載

#include<iostream>
using namespace std;
class myInt
{
 friend ostream& operator<<(ostream& cout, myInt num);
public:
 myInt()
 {
 this->m_a = 0;
 }
 //前置++運算符重載
 myInt& operator++()//返回引用是為了一直對一個數(shù)據(jù)進行遞增,否則函數(shù)默認返回一個新的數(shù)
 {
 //先進行++
 m_a++;
 //然后返回自身
 return *this;
 }
 //后置++運算符重載
 myInt operator++(int)//int表示占位參數(shù),用于區(qū)分前置后置參數(shù)
 {
 //先記錄當前的值
 myInt temp=*this;
 //再遞增
 m_a++;
 //然后返回記錄的值
 return temp;
 }
private:
 int m_a; 
};
//左移運算符重載
ostream& operator<<(ostream& cout, myInt num)
{
 cout << num.m_a;
 return cout;
}
void test01()
{
 myInt myint;
 cout << myint << endl;
 cout << ++myint << endl;
 cout << myint << endl;

}
int main()
{
 test01();
 system("pause");
 return 0;
}

賦值運算符重載

#include<iostream>
using namespace std;
class Person
{
public:
 Person(int num)//將數(shù)據(jù)開辟到堆區(qū)
 {
 m_a = new int(num);
 }
 ~Person()
 {
 if (m_a != NULL)
 {
  delete m_a;
  m_a = NULL;
 }
 }
 //重載賦值運算符
 Person& operator=(Person &p)//返回值用Person返回本身,可執(zhí)行連等
 {
 //先判斷是否有屬性在堆區(qū),如果有先釋放干凈
 if (m_a != NULL)
 {
  delete m_a;
  m_a = NULL;
 }
 m_a = new int(*p.m_a);
 return *this;
 }
 int* m_a;
 
};
void test01()
{
 Person p1(18);
 Person p2(209);
 Person p3(9);
 p2 = p1 = p3;
 cout << *p1.m_a << endl;
 cout << *p2.m_a << endl;
 cout << *p3.m_a << endl;
}
int main()
{
 test01();
 system("pause");
 return 0;
}

關系運算符重載

#include<iostream>
using namespace std;
#include<string>
class Person
{
public:
 
 Person(string name, int age)
 {
 this->age = age;
 this->name = name;
 }
 bool operator==(Person& p)
 {
 if (this->age == p.age && this->name == p.name)
 {
  return true;
 }
 else {
  return false;
 }
 }
 bool operator!=(Person& p)
 {
 if (this->age == p.age && this->name == p.name)
 {
  return false;
 }
 else {
  return true;
 }
 }
 string name;
 int age;

 
};
void test01()
{
 Person p1("gouride", 19);
 Person p2("gouride", 19);
 if (p1 == p2) {
 cout << "p1和p2相同" << endl;
 }
 else {
 cout << "p1和p2不相同" << endl;
 }
 if (p1 != p2) {
 cout << "p1和p2不相同" << endl;
 }
 else {
 cout << "p1和p2相同" << endl;
 }
}
int main()
{
 test01();
 system("pause");
 return 0;
}

函數(shù)調用重載

仿函數(shù)

#include<iostream>
using namespace std;
#include<string>
class Myprint
{
public:
 void operator()(string name)
 {
 cout << name << endl;
 }
 int operator()(int a,int b)
 {
 return a + b;
 }
};
void test01()
{
 
 Myprint myprint;
 myprint("測試");
 //匿名對象調用
 cout << Myprint()(4,6) << endl;
}
int main()
{
 test01();
 system("pause");
 return 0;
}

總結

到此這篇關于C++運算符重載的文章就介紹到這了,更多相關C++運算符重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C 語言環(huán)境設置詳細講解

    C 語言環(huán)境設置詳細講解

    本文主要介紹C 語言環(huán)境設置,在不同的系統(tǒng)平臺上,C語言的環(huán)境設置不同,這里幫大家整理了Liunx, UNIX,Windows 上安裝C語言環(huán)境,有開始學習C語言的朋友可以參考下
    2016-08-08
  • C語言實現(xiàn)簡單計算器

    C語言實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 用C編寫一個送給女朋友的情人節(jié)小程序 可愛!

    用C編寫一個送給女朋友的情人節(jié)小程序 可愛!

    非??蓯鄣那槿斯?jié)小程序!文章為大家分享了用C編寫一個送給女朋友的小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++模擬實現(xiàn)stack和Queue的操作示例

    C++模擬實現(xiàn)stack和Queue的操作示例

    這篇文章主要介紹了C++模擬實現(xiàn)stack和Queue的操作示例,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • C++位操作的常見用法小結

    C++位操作的常見用法小結

    這篇文章主要介紹了C++位操作的常見用法,包括了判斷奇偶、交換兩個數(shù)、正負轉換、求絕對值等,需要的朋友可以參考下
    2014-09-09
  • VSCode (Visual Studio Code) V1.43.0下載并設置成中文語言的方法

    VSCode (Visual Studio Code) V1.43.0下載并設置成中文語言的方法

    Visual Studio Code是一款免費開源的現(xiàn)代化輕量級代碼編輯器,支持語法高亮、智能代碼補全、自定義熱鍵、括號匹配、代碼片段、代碼對比 Diff、GIT 等特性,這篇文章主要介紹了VSCode (Visual Studio Code) V1.43.0下載并設置成中文語言,需要的朋友可以參考下
    2020-03-03
  • C++11的新特性簡單匯總介紹 (二)

    C++11的新特性簡單匯總介紹 (二)

    最近學習了C++11的新特性,將學習內(nèi)容整理下來以鞏固記憶,這里分享給大家,希望對大家學習C++11能夠有所幫助
    2016-07-07
  • C++ TensorflowLite模型驗證的過程詳解

    C++ TensorflowLite模型驗證的過程詳解

    這篇文章給大家介紹了C++ TensorflowLite模型驗證的過程,測試代碼,主要是RunInference()和read_file(),詳細操作過程跟隨小編一起看看吧
    2021-08-08
  • 詳解C語言函數(shù)返回值解析

    詳解C語言函數(shù)返回值解析

    這篇文章主要介紹了詳解C語言函數(shù)返回值解析的相關資料,需要的朋友可以參考下
    2017-06-06
  • C++?sqlite3數(shù)據(jù)庫配置使用教程

    C++?sqlite3數(shù)據(jù)庫配置使用教程

    SQLite 是一種嵌入式的關系型數(shù)據(jù)庫管理系統(tǒng),它是一個開源項目,已經(jīng)被廣泛應用于各種應用程序和操作系統(tǒng)中,這篇文章主要介紹了C++?sqlite3數(shù)據(jù)庫配置使用,需要的朋友可以參考下
    2023-08-08

最新評論