运算符在c++中重载,我需要存储单个字母的整数
operators overloading in c++ , I need to store words intead of a single letter?
我需要一些帮助。
这是我的功能:
class teacher
{
public:
char &operator[](int i);
protected:
char* contents;
};
.cpp
char & teacher::operator[](int i)
{
return contents[i];
}
主
teacher s1;
cout<<"Enter names: "<<endl;
cin>>s1[1];
cout<<s1[1];
如果我输入一个单词,它只返回第一个字符,我不知道为什么如果我使用的是char*
如果您想要一个char*
数组,则需要将其设为char**
。contents[i]
是char
,而不是char*
。
为什么不使用vector<string>
?
您使用char*
,但operator []
返回char&
,这与char*
不同。
如果修改char&
,则只修改一个字符。
您想要做的是:
class teacher {
public:
char*& operator[](int i);
protected:
char** contents;
};
char*& teacher::operator[](int i) {
return contents[i];
}
这里有一个char*
的数组,即C样式的字符串。[]
运算符返回其中一个char*
作为引用,这样代码就可以更改指针以指向其他字符串。这是根据常见的C++访问器习惯用法。
如果您选择使用std::string
,您只需要将char*
的所有出现替换为std::string
。
然而,就我个人而言,我并不认为这种方法一定是最好的;我对暴露类内部工作的接口有一些反对意见。在这种情况下,任何调用者都可以获得对类使用的指针的引用,并可以在以后的任何时间使用它来直接修改teacher
的内容,而无需经过另一个teacher
方法。这使得无法确保contents
的任何与teacher
的任何其他数据成员的值的一致性。
在我编写的代码中,我尽量避免访问器,而倾向于实际执行某些操作的方法。这有助于避免代码混乱,并允许方法名称命名更高级别的操作。但这只是我的观点,许多其他人对此有不同的看法。
相关文章:
- 如何避免在数据结构中包含存储为字段的类?
- 单个变量如何存储多个值?
- 使用单个套接字处理多个传入的 UDP 连接
- 如何使用连接器 c++ 在 mySQL 表二进制(16) 字段中存储 c++ 字节数组?
- 是否可以使用 Wojciech Mula 算法将 __m256i 个 32 位字而不是 4 个 64 位字存储为弹出计数和结果?
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 存储将单个查询图像与多个图像的列表匹配的关键点索引
- 如何高效/正确地存储等距游戏的不同类(单个超类的所有子类型)的地图?
- std::bad_alloc 将文本文件中的单个字符存储到矢量C++中时
- 如何使用 gtest 构造检查存储在向量中的结构(字段)?
- 字符串中的重音,如何在单个字符中存储重音字符
- 如何使用 stl 容器有效地存储对象?(即根据其字段的值进行搜索)
- 从存储库读取单个文件时出现问题
- 如何将整个单词存储在单个阵列插槽中
- 可以使用单个内存块存储多个对象是可以的吗?
- 是否有一种方法可以从文本文件中读取并将单个数据存储为不同的变量
- QSqlQuery插入完整的结构,而不是单个字段
- 运算符在c++中重载,我需要存储单个字母的整数
- 如何在C++中从字节数组(在 BIG-ENDIAN 中)中提取单个字段
- 对象字段返回对象本身,而不是存储在字段中的实例