[英]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.