如何過載 運算子?

時間 2021-05-11 00:43:29

1樓:XZiar

operator返回乙個double*或者不就夠了,使用時裡的第二個是指標自帶。

不過存多維陣列的話我還是推薦扁平化……

C++怎麼實現效率盡可能高地帶邊界檢查的多維陣列模板類?

2樓:果凍蝦仁

與其過載不如過載()。你所需要的操作它都能滿足,而且也不失優雅。

這種表達,很容易聯想到一種資料型別,那就是矩陣:Matrix。

而關於Matrix該如何優雅的過載運算子。isocpp官方恰好有個demo,那就是過載 operator () 而不是:

class

Matrix

;inline

Matrix

::Matrix

(unsigned

rows

,unsigned

cols):

rows_

(rows),

cols_

(cols

)//, data_ ← initialized below after the if...throw statement

inline

Matrix

::~Matrix

()inline

double

&Matrix

::operator()(

unsigned

row,

unsigned

col)

inline

double

Matrix

::operator()(

unsigned

row,

unsigned

col)

const

intmain

()引用自:https://

isocpp.org/wiki/faq/ope

rator-overloading#matrix-subscript-op

的通過中間類還能實現。假如你日後需要呢?這並不稀奇,比如表示更高維的向量空間。

operator ()比之其他operator的一大好處就是不限制引數個數,並且()看著也並不突兀。

3樓:

class A{

public:

double mArray[2][2];

double* operator (int indexreturn mArray[index

木考慮越界,方式上可以這樣實現(我在自己機器上可以通過)

4樓:d41d8c

←_← 想好了,支援a[0][0]就意味著(a[0])[0]和(auto&& r) (a[0])都要有同樣的語義。尤其是後乙個,使用者可能會拿r做各種各樣的操作,作為實現者要想好哪些操作有什麼後果。

如果不想承受這種心智負擔的話,還是不要支援這種寫法為好。a.at(0, 0)也沒多長。

支援a[0][0]的方式其他答主都解釋過了,就是讓operator返回乙個proxy。

5樓:Milo Yip

需要乙個 helper 類,大約是:

class

ARowHelper

public

:double

&operator

(size_tc)

};classA};

實際上還要考慮 const-ness 等問題。

python如何實現左側的運算子過載?

Kittyhawk 先從myob 1說起,假設myob屬於Myob類,這裡我們過載了 mul class Myob def mul self val print mul 過載了 mul 後我們就可以順利實現myob 1,結果是列印出 mul 但如果把兩者換一下位,1 myob,就會報錯了。這是因為1...

C 輸出運算子過載,為什麼要返回引用才能實現連續輸出?返回物件不可以實現連續輸出嗎?

石大頭 其他答主說得很好了。題主應該更進一步體會值語義和物件語義的區別,物件語義天生是不支援拷貝的。比如說Person laowang laowang 拷貝一下難道代表有兩個老王嗎 回答最長的那個我覺得太複雜了。為什麼要返回引用其實很簡單,輸出運算子 是乙個運算子,跟算術運算子 一樣,有著相應的規則...

python的邏輯運算子 and,or,not 和普通的邏輯運算子( )有何區別?

追遠 J 先糾正題主的乙個小錯誤。跟 同屬一家的運算子應該是 而非 這個問題還挺有意思 對問題本身的回答其實並不複雜 原則上講,and,or,not針對布林值 True False 進行運算,就是字面上的與或非的功能,確實可以稱之為邏輯運算子 類似C C 中的 而 則對應C C 中所謂的 按位運算子...