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