Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cpp为什么s.query会被覆盖_C++_Operator Overloading - Fatal编程技术网

C++ cpp为什么s.query会被覆盖

C++ cpp为什么s.query会被覆盖,c++,operator-overloading,C++,Operator Overloading,我正在开发一个类,它使我能够轻松地构建sql语句。我想到的一个想法是使用运算符重载,允许我向sql语句中添加不同的值类型。也就是说,问题是出于某种原因,每次我再次给接线员打电话时,它似乎会覆盖上一次通话的效果。这是我的密码: #include <string> #include <iostream> using namespace std; class sql { string query; public: sql(); void add(i

我正在开发一个类,它使我能够轻松地构建sql语句。我想到的一个想法是使用运算符重载,允许我向sql语句中添加不同的值类型。也就是说,问题是出于某种原因,每次我再次给接线员打电话时,它似乎会覆盖上一次通话的效果。这是我的密码:

#include <string>
#include <iostream>
using namespace std;
class sql
{
    string query;

  public:
    sql();
    void add(int i);
    void end();
    void print();
    void add_string(string str);
    sql operator+(const string &str) const;
    sql operator+(const int &i) const;
};

sql::sql()
{
    this->query = "";
}

sql sql::operator+(const int &i) const
{
    sql result;
    result.add(i);
    return result;
}

sql sql::operator+(const string &str) const
{
    sql result;
    result.add_string(str);
    return result;
}

void sql::add_string(string str)
{
    this->query = this->query + "'" + str + "',";
}

void sql::add(int i)
{
    query = query + to_string(i) + ",";
}

void sql::end()
{
    query += ";";
}

void sql::print()
{
    cout << this->query;
}

int main()
{
    sql s;
    string s1("terry");
    int i = 10;
    s = s + s1;
    s.print();
    cout << endl;
    s = s + i;
    s.print();
}
而是:

'terry',
10, 

为什么+运算符的第二次使用会覆盖第一次使用的效果

如果仔细查看
操作符+
实现,很明显它没有使用左侧对象

sql sql::operator+(const string &str) const
{
    sql result;
    result.query = this->query; // concat whatever was stored in the left-side object
    result.add_string(str);
    return result;
}
创建一个新的空
sql

    result.add(i);
    return result;
}
    result.add(i);
将整数添加到空
sql

    result.add(i);
    return result;
}
    result.add(i);
给定的
sql
this
,尚未使用。相反

sql sql::operator+(const int &i) const
{
    sql result(*this);
复制基于当前的
sql

    result.add(i);
    return result;
}
    result.add(i);
将i添加到包含上一个
sql
内容的sql中

    return result;
}
你也会对我做同样的事

sql sql::operator+(const string &str) const