2016-11-10 76 views
-2

下午好!这个编码业务仍然是新的,所以请裸露在我身边。我只想知道是否有一种方法可以使用单个函数来重载许多运算符?C++:在单个函数中重载多个运算符?

我正在做一个简单的程序来使用+, - ,*,/操作符处理矩阵,而不是复制和粘贴每个新的代码,是否有一种方法可以使用一种工作类型的重载函数像一个开关?

Matrix Matrix::operator+(int scalar) { 
    Matrix newest(row, col); 

    for (int i = 0; i < row; ++i) { 
     for (int j = 0; j < col; ++j) { 
      newest.matrix[i][j] = matrix[i][j] + scalar; 
     } 
    } 
    return newest; 
} 

Matrix Matrix::operator-(int scalar) { 
    Matrix newest(row, col); 

    for (int i = 0; i < row; ++i) { 
     for (int j = 0; j < col; ++j) { 
      newest.matrix[i][j] = matrix[i][j] - scalar; 
     } 
    } 
    return newest; 
} 

Matrix Matrix::operator*(int scalar) { 
    Matrix newest(row, col); 

    for (int i = 0; i < row; ++i) { 
     for (int j = 0; j < col; ++j) { 
      newest.matrix[i][j] = matrix[i][j] * scalar; 
     } 
    } 
    return newest; 
} 
Matrix Matrix::operator/(int scalar) { 
    Matrix newest(row, col); 

    for (int i = 0; i < row; ++i) { 
     for (int j = 0; j < col; ++j) { 
     newest.matrix[i][j] = matrix[i][j]/scalar; 
     } 
    } 
    return newest; 
} 

有没有办法凝聚这一点,以便而不必使4个独立的功能,我可以让一个重载函数,并把它确定哪些运营商被称为与这项工作?

+0

_can使一个重载函数,并将它确定哪些运营商被称为并与工作_当然可以。你有没有试图做到这一点? –

回答

0

您不能“运算”运算符符号并实现“运算符any_op”函数。

尽管如此,您可以创建一个通用函数并转发该函数。
事情是这样的:?

Matrix Matrix::operate(std::function<int(int,int)> fn, int scalar) { 
    Matrix newest(row, col);  
    for (int i = 0; i < row; ++i) { 
     for (int j = 0; j < col; ++j) { 
      newest.matrix[i][j] = fn(matrix[i][j], scalar); 
     } 
    } 
    return newest; 
} 

Matrix Matrix::operator-(int scalar) { 
    return operate(std::minus<int>(), scalar); 
} 

Matrix Matrix::operator+(int scalar) { 
    return operate(std::plus<int>(), scalar); 
} 

// and similarly for the other operators.