我正在研究一个使我易于构建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',
'terry',10,
但是是:
'terry',
10,
为什么第二个使用+运算符会覆盖第一个的效果?
答案 0 :(得分:1)
sql
创建一个新的空 result.add(i);
sql
将整数添加到空 return result;
}
sql
给定的this
sql sql::operator+(const int &i) const
{
sql result(*this);
未使用。
sql
copy根据当前的sql
构造一个新的 result.add(i);
sql
将i添加到包含先前 return result;
}
内容的sql中。
sql sql::operator+(const string &str) const
您将要对
做同样的事情JOIN
答案 1 :(得分:0)
如果仔细查看operator +
的实现,很明显它没有利用左侧对象。
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;
}