本篇內(nèi)容主要講解“如何快速理解C ++中的運算符重載”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何快速理解C ++中的運算符重載”吧!
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站制作、成都網(wǎng)站建設(shè)、西山網(wǎng)絡推廣、小程序定制開發(fā)、西山網(wǎng)絡營銷、西山企業(yè)策劃、西山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供西山建站搭建服務,24小時服務熱線:13518219792,官方網(wǎng)址:bm7419.com
在C ++中,我們可以使運算符為用戶定義的類工作。這意味著C ++能夠為運算符提供數(shù)據(jù)類型的特殊含義,這種能力稱為運算符重載。例如,我們可以在String之類的類中重載運算符'+',以便僅使用+就可以連接兩個字符串。 算術(shù)運算符可能會重載的其他示例類是復數(shù),小數(shù),大整數(shù)等。
一個簡單而完整的例子
#include<iostream> using namespace std; class Complex { private: int real, imag; public: Complex(int r = 0, int i =0) {real = r; imag = i;} Complex operator + (Complex const &obj) { Complex res; res.real = real + obj.real; res.imag = imag + obj.imag; return res; } void print() { cout << real << " + i" << imag << endl; } }; int main() { Complex c1(10, 5), c2(2, 4); Complex c3 = c1 + c2; c3.print(); }
操作員功能和普通功能有什么區(qū)別?
操作員功能與普通功能相同。唯一的區(qū)別是,運算符的名稱始終是運算符關(guān)鍵字,后跟運算符的符號,并且在使用相應的運算符時會調(diào)用運算符功能。
以下是全局運算符功能的示例。
#include<iostream> using namespace std; class Complex { private: int real, imag; public: Complex(int r = 0, int i =0) {real = r; imag = i;} void print() { cout << real << " + i" << imag << endl; } friend Complex operator + (Complex const &, Complex const &); }; Complex operator + (Complex const &c1, Complex const &c2) { return Complex(c1.real + c2.real, c1.imag + c2.imag); } int main() { Complex c1(10, 5), c2(2, 4); Complex c3 = c1 + c2; c3.print(); return 0; }
我們可以讓所有運算符超負荷嗎?
除了少數(shù)操作員之外,幾乎所有操作員都可以重載。以下是不能重載的運算符的列表。
為什么不能。(點),::,?:和sizeof是否過載?
請參閱此以獲取Stroustrup自己的答案。
關(guān)于運算符重載的要點
1)為了使運算符重載起作用,至少一個操作數(shù)必須是用戶定義的類對象。
2) 賦值運算符:編譯器會自動為每個類創(chuàng)建一個默認的賦值運算符。默認賦值運算符確實將右側(cè)的所有成員分配到左側(cè),并且在大多數(shù)情況下都可以正常工作(此行為與復制構(gòu)造函數(shù)相同)。請參閱此了解更多詳情。
3) 轉(zhuǎn)換運算符:我們還可以編寫可用于將一種類型轉(zhuǎn)換為另一種類型的轉(zhuǎn)換運算符。
#include <iostream> using namespace std; class Fraction { int num, den; public: Fraction(int n, int d) { num = n; den = d; } operator float() const { return float(num) / float(den); } }; int main() { Fraction f(2, 5); float val = f; cout << val; return 0; }
重載的轉(zhuǎn)換運算符必須是成員方法。其他運算符可以是成員方法或全局方法。
4)任何可以用單個參數(shù)調(diào)用的構(gòu)造函數(shù)都可以用作轉(zhuǎn)換構(gòu)造函數(shù),這意味著它也可以用于隱式轉(zhuǎn)換為正在構(gòu)造的類。
#include<iostream> using namespace std; class Point { private: int x, y; public: Point(int i = 0, int j = 0) { x = i; y = j; } void print() { cout << endl << " x = " << x << ", y = " << y; } }; int main() { Point t(20, 20); t.print(); t = 30; t.print(); return 0; }
到此,相信大家對“如何快速理解C ++中的運算符重載”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
網(wǎng)站名稱:如何快速理解C++中的運算符重載
當前鏈接:http://bm7419.com/article6/gocdog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、域名注冊、、面包屑導航、小程序開發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)