簡體   English   中英

課堂上的重載運算符

[英]Overloading operator in class

“ Square_Matrix”類的對象存儲一個整數矩陣。

這是我如何檢查兩個矩陣是否相等的方法嗎? 我想通過重載'=='比較兩個2d數組,以檢查2個矩陣之間的每個元素是否相同。

例如:我需要進行以下工作:

Square_Matrix a,b;
if (a == b) {return 1;}

a和b都是動態二維數組。

但是,我遇到一個錯誤:'operator'之前意外的初始化器。 我怎樣才能解決這個問題? 除此之外,這是語法外觀嗎?

//header file
bool operator==(Square_Matrix array1, Square_Matrix array2);

//.cpp file
bool Square_Matrix operator ==(Square_Matrix array1, Square_Matrix array2){
    if (array1.size != array2.size){
        return false;
    }
    for (int i = 0; i < array1.size; i++){
        for (int j = 0; j < array1.size; j++){
            if (array1[i][j] != array2[i][j]){
                return false;
            }
        }
    }
    return true;
}

大多數二進制運算符可以通過兩種不同方式之一進行重載。 一個作為成員函數,另一個作為全局(免費)函數。

成員函數版本將采用一個參數。 x == y這樣的表達式將被解釋為x.operator==(y)

自由功能版本帶有兩個參數。 x == y這樣的表達式被解釋為operator==(x, y)

您需要確定要使用的參數,並適當定義參數數量。 現在,您似乎擁有一個僅包含一個參數的自由函數,該函數僅適用於一元運算符,不適用於二進制運算符。

當您將重載作為自由函數時,通常會提供對稱性。 具體來說,自由函數可以將左或右操作數轉換為運算符的正確類型。 成員函數重載只能將正確的操作數轉換為運算符的正確類型。

運算符應聲明為

bool operator ==( const Square_Matrix &array2 ) const;

如果它是該類的成員。

或者可以將其聲明為類的朋友功能,例如

friend  bool operator ==( const Square_Matrix &array1, const Square_Matrix &array2 );

我想該類的數據成員的名稱大小包含方矩陣的大小

bool Square_Matrix::operator ==( const Square_Matrix &array2 ) const
{
    if ( size != array2.size ) return false;

    for (int i = 0; i < size; i++ )
    {
        for ( int j = 0; j < size; j++ )
        {
            if ( mPoint[i][j] != array2.mPoint[i][j] ) return false;
        }
    }

    return true;
}

編輯:我刪除了一些錯字。

您的代碼的問題是您需要::

bool Square_Matrix operator ==(Square_Matrix array2){

變成這個:

bool Square_Matrix::operator ==(Square_Matrix array2){

錯誤“操作符之前有意外的初始化程序”是因為它不理解您正在嘗試使用類方法。

Square_Matrix operator ==更改為Square_Matrix::operator ==

另外,您是否不想通過引用將Square_Matrix傳遞給您的運算符?

bool operator==(const Square_Matrix& that) const;

要么

static bool operator==(const Square_Matrix& a,
                       const Square_Matrix& b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM