运算符在c++中重载,我需要存储单个字母的整数

operators overloading in c++ , I need to store words intead of a single letter?

本文关键字:存储 单个字 整数 c++ 重载 运算符      更新时间:2023-10-16

我需要一些帮助。

这是我的功能:

 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的任何其他数据成员的值的一致性。

在我编写的代码中,我尽量避免访问器,而倾向于实际执行某些操作的方法。这有助于避免代码混乱,并允许方法名称命名更高级别的操作。但这只是我的观点,许多其他人对此有不同的看法。