gpt4 book ai didi

c++ - 了解运算符重载的效用

转载 作者:行者123 更新时间:2023-11-27 23:46:34 24 4
gpt4 key购买 nike

我一直在研究旨在创建规则矩阵的类“DenseMatrix”的代码。

通过代码,有两三处我不太明白。
所以首先是这个类的代码:

#include<iostream>
#include<complex>
#include<vector>
#include <cassert>

using namespace std ;

class DenseMatrix{
typedef complex<double> Cplx;

private:
int nr, nc;
vector<Cplx> data;

public :
DenseMatrix(const int& nr0, const int& nc0){
nr = nr0; nc = nc0; data.resize(nr*nc,0);}

DenseMatrix(const DenseMatrix& M){
nr = M.nr; nc = M.nc; data.resize((M.data).size());
for (int j=0; j<data.size(); j++) {data[j]=M.data[j];} }

void operator=(const DenseMatrix& M){
nr = M.nr ; nc = M.nc ; data.resize((M.data).size());
for (int j=0; j<data.size() ; j++){data[j]=M.data[j];} }

Cplx& operator () (const int& j ,const int& k) {
assert(0<=j && j<nr && 0<=k && k<nc) ; return data[k+j*nc];}

const Cplx& operator () (const int& j ,const int& k) const {
assert(0<=j && j<nr && 0<=k && k<nc) ; return data[k+j*nc];}

friend ostream& operator<<(ostream& o , const DenseMatrix& M){
for ( int j =0; j<nr ; j++){ for ( int k=0; k<nc; k++){o << M(j,k) << "\ t " ;} o << endl ;}
//return o ;}
};

首先,如果我们可以实际使用复制构造函数并获得相同的结果,那么定义“=”运算符有什么用?

第二,如果我的理解是正确的,Cplx& operator () 将返回一个引用,这个引用实际上允许我们修改一个私有(private)属性(矩阵的一个元素)。但是运算符的第二个定义 const Cplx& operator () (const int& j ,const int& k) const 是做什么的?它的用途是什么?

谢谢!

最佳答案

First thing is what's the utility of defining the "=" operator if we can actually use the copy constructor and obtain the same result ?

因为你不能使用复制构造函数来获得相同的结果。复制构造函数是一个构造函数;构造矩阵时会用到它。赋值运算符可让您对已构建的矩阵进行赋值。

Second thing, if my understanding is right, Cplx& operator () will return a reference and this reference will actually allow us to modify [an element of the matrix].

But what does the second definition of operator, const Cplx& operator () (const int& j ,const int& k) const, do?

该版本适用于您拥有 const DenseMatrix 的情况。想象一下,您使用了普通的 operator() - 您会得到一个 Cplx&,您可以使用它来更改矩阵元素。但是,如果它是 const 矩阵,则不允许更改矩阵元素。编译器不允许在 const 矩阵上使用第一个版本。

最后一个 const(在 { 之前)表示此函数可以调用 const DenseMatrix

关于c++ - 了解运算符重载的效用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com