【问题标题】:backslash in C++C++ 中的反斜杠
【发布时间】:2020-02-11 02:50:54
【问题描述】:

在 Matlab 中 x=A\b;求解线性系统 Ax=b。是否可以在 C++ 中模仿相同的内容?可以通过运算符重载,但是如何在下面的程序中使用 \ 而不是 /?

friend Vector operator/(const Vector &b, const Matrix &A)
{   //BiCG Algorithm is used here. 
    int row=A.getrowdim();
    int col=A.getcoldim();
    Vector x(row,0.0);
    Vector r(row,0.0);
    Vector s(row,0.0);
    Vector u(row,0.0);
    Vector v(row,0.0);
    Vector w(row,0.0);
    Vector p(row,0.0);
    double rho0,beta,alpha,rho;
    Vector t(row,0.0);
    double norm;
    r=b-A*x;
    s=r;
    rho0=1;
    for(int k=1;k<M;k++)
    {
        rho=s*r;
        beta=rho/rho0;
        u=r+beta*u;
        w=s+beta*w;
        v=A*u;
        alpha=rho/(w*v);
        x=x+alpha*u;
        r=r-alpha*v;
        s=s-alpha*(Transpose(A)*w);
        norm=r.norm(2);
        cout<<"Step Number "<<k<<" xnorm "<<norm<<endl;
        if(norm<eps)
            break;
        rho0=rho;
    }
       return x;
}

【问题讨论】:

  • 任何不错的 C++ 书籍、教程或课程都应该告诉您,您不能发明自己的运算符。
  • 是的。确实如此,我知道。我想知道是否有任何黑客可用。
  • 像普通函数一样给它一个合理的描述性名称。
  • 运算符重载的缺点比人们预期的要多。重载运算符的一个好例子是语义对每个人来说都是自然且清晰的。由于 C++ 中没有其他任何东西都有运算符 `\`,所以您的情况不是其中之一,然后通常最好使用成员函数

标签: c++ operator-overloading operators


【解决方案1】:

没有。

你不能重载operator\(主要是因为它不存在)。

像任何其他函数一样,为操作起一个漂亮、清晰、描述性的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2015-08-11
    • 1970-01-01
    相关资源
    最近更新 更多