C++运算符重载[],数据参数在哪里分配?
我想在类中为运算符[]添加重载。运算符重载不是我以前必须做的事情 我想编写一个实现来执行以下操作:C++运算符重载[],数据参数在哪里分配?,c++,operator-overloading,C++,Operator Overloading,我想在类中为运算符[]添加重载。运算符重载不是我以前必须做的事情 我想编写一个实现来执行以下操作: myclass a; a["test"] = 123; int test = a["test"]; 到目前为止,在我的课堂上,原型如下所示: string operator[](const char* cpszLabel); string myclass::operator[](const char* cpszLabel) {
myclass a;
a["test"] = 123;
int test = a["test"];
到目前为止,在我的课堂上,原型如下所示:
string operator[](const char* cpszLabel);
string myclass::operator[](const char* cpszLabel) {
string strContent;
if ( cpszLabel != nullptr ) {
}
return strContent;
}
实施未完成,如下所示:
string operator[](const char* cpszLabel);
string myclass::operator[](const char* cpszLabel) {
string strContent;
if ( cpszLabel != nullptr ) {
}
return strContent;
}
我不确定的是如何引用正在分配的数据,或者这是否也需要重载“=”呢
我为“=”操作符添加了一个重载,但没有调用:
原型:
string operator=(int intData);
实施:
string myclass::operator=(int intData) {
char szString[24];
sprintf(szString, "\"%d\"", intData);
return string(szString);
}
您需要安排一些内容,以便运算符[]const char*cpszLabel返回对类中某些内容的引用 int&运算符[]常量字符*cpszLabel 可能是一个更好的原型 然后可以通过该引用修改类中的某些内容。老实说,你想要的东西可以用
typedef std::map<std::string, int> myclass;
您需要安排一些内容,以便运算符[]const char*cpszLabel返回对类中某些内容的引用 int&运算符[]常量字符*cpszLabel 可能是一个更好的原型 然后可以通过该引用修改类中的某些内容。老实说,你想要的东西可以用
typedef std::map<std::string, int> myclass;
在[测试]=123的情况下;,赋值的接收者是从查找中返回的对象,它是一个字符串。
不能重载字符串的赋值运算符
但是,众所周知,每一个问题都可以通过引入一个间接层次来解决
您可以存储自己的类型而不是std::string,并让它处理转换
一个很小的例子作为说明:
struct Data
{
template<typename T>
Data& operator=(const T& rhs)
{
std::ostringstream os;
os << rhs;
value = os.str();
return *this;
}
operator const char*() const { return value.c_str(); }
std::string value;
};
struct Container
{
Data& operator[] (const std::string& s) { return table[s]; }
std::map<std::string, Data> table;
};
int main()
{
Container cont;
cont["foo"] = "bar";
cont["baz"] = 123;
cont["goo"] = 5.5;
for (auto v: cont.table)
{
std::cout << v.first << " --> " << v.second << '\n';
}
}
在[测试]=123的情况下;,赋值的接收者是从查找中返回的对象,它是一个字符串。
不能重载字符串的赋值运算符
但是,众所周知,每一个问题都可以通过引入一个间接层次来解决
您可以存储自己的类型而不是std::string,并让它处理转换
一个很小的例子作为说明:
struct Data
{
template<typename T>
Data& operator=(const T& rhs)
{
std::ostringstream os;
os << rhs;
value = os.str();
return *this;
}
operator const char*() const { return value.c_str(); }
std::string value;
};
struct Container
{
Data& operator[] (const std::string& s) { return table[s]; }
std::map<std::string, Data> table;
};
int main()
{
Container cont;
cont["foo"] = "bar";
cont["baz"] = 123;
cont["goo"] = 5.5;
for (auto v: cont.table)
{
std::cout << v.first << " --> " << v.second << '\n';
}
}
谢谢,但我不知道这有什么帮助,我在哪里可以访问分配的数据?@Splaten:这将是类本身的数据,您可能需要动态创建。谢谢,但我不确定这有什么帮助,我在哪里可以访问分配的数据?@Splaten:这将是类本身的数据,您可能需要动态创建。评论不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。