使用const char*和/或字符串重载运算符=或运算符[]
Overloading operator= or operator[] using const char* and/or string
我一直在谷歌和stackoverflow上搜索,到目前为止还没有明确的答案,所以我直接问。。。
我制作了一个位图字体类,我想使用赋值运算符:operator=(constchar*(为该类的文本分配一个字符串文字。注意:我还想使用string、string*和char*进行赋值。。。例如:
class BitmapText{
private:
std::string _text;
public:
void operator=(const char* _t){
_text = _t;
}
/*I've also tried another iteration of this operator using
BitmapText& operator=(const char* _t){
_text = _t;
return *this;
}
*/
BitmapText(){}
~BitmapText(){}
};
BitmapText* t1 = new BitmapText();
t1 = "Hello World"
将字符字符串分配给BitmapText对象会产生如下结果:
Assigning to 'BitmapText*' from 'const char[12]' incompatible type.
我相信这是有充分理由的。但是它可以用字符串类来完成。我查看了字符串类,它的类型定义来自:
typedef basic_string<char, char_traits<char>, allocator<char> > string;
这就是为什么我可以给字符串类分配一个char数组的原因吗?因为它似乎以某种方式继承了char的特性?如果没有这么复杂的实现,我能超负荷地尝试吗?
我的第二个问题(我认为(大致如下:我想使用运算符[](const char*_name(返回一个名称与_name值匹配的子对象。
我看到的每个运算符重载示例都使用与被重载的运算符相同类类型的右手操作数。然而,我读过,你可以使用不同的数据类型,我们可以清楚地使用char*为std::string对象赋值。。。
我错过了什么?我们非常感谢所有的帮助。
以以下方式定义操作员
BitmapText & operator =( const std::string &t )
{
_text = t;
return *this;
}
它可以用于std::string
类型的对象和char *
类型的对象,因为由于类std::string
的转换构造函数存在从const char *
到std::string
的隐式转换。
关于这个代码片段
BitmapText* t1 = new BitmapText();
t1 = "Hello World"
^^^ ^^
则必须以以下方式重写
BitmapText* t1 = new BitmapText();
*t1 = "Hello World";
此声明
t1 = "Hello World";
是错误的,因为您正试图将const char *
类型的指针分配给BitmapText *
类型的指针。
您正在尝试分配给t1
,它不是BitmapText
,而是指向BitmapText
的指针;
如果你做*t1 = "Hello World";
,它应该会起作用。
您正试图将字符串文本的地址分配给指针。请尝试:
BitmapText* t1 = new BitmapText();
(*t1)= "Hello World";
- 在运算符重载定义中使用成员函数(const错误)
- 不允许运算符 const 参数调用 const 成员函数
- C++概念assignable_from不接受 const&-return 运算符=
- 有人可以用"显式运算符 const GUID_t&() const"来解释成员函数的函数吗?
- 关于重载 -> 运算符中 const 关键字的特定位置的问题
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 在函数中使用运算符重载,在 c++ 中使用 const 类型输入参数
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 为什么 std::basic_ostream::运算符<<不符合 CONST 资格?
- 在运算符重载中使用带有 const 引用的 friend 函数
- STL按客户"<"运算符对向量进行排序。为什么要将"<"运算符定义为 const?
- 如何在 std::map<const int、int> C++ 中重载插入运算符>>?
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- 为什么重载运算符>在参数声明 const 时不起作用?
- 在 ostream 中使用运算符 const char*
- 错误 C2280;运算符 =(const Employee &) 在执行 employees.erase() 时出现问题
- 运算符 const Base&() 是否应该用于无法访问的基类?
- 复制 ctor 和复制赋值运算符 const 关键字位置
- 如何创建一个合适的布尔值 员工::运算符==(const Employee & rhs) const
- 重载运算符.Const论点会产生一些问题