для назначения мне нужно перегрузить оператор индекса []
, чтобы вывести преобразованную версию номера тщеславия. Например, 1800STACKOVERFLOW
будет преобразован в полезный номер телефона. Однако мне также необходимо перегрузить оператор вывода для вывода преобразования на консоль. Я думал, что смогу использовать свою перегруженную функцию индексации в моей перегруженной функции вывода, но это невозможно.
Это уменьшенная версия перегруженного оператора []
для моего класса:
string& newString::operator[](int i) {
if (input[i] == "A" || input[i] == "B" || input[i] == "C") {
input[i] = "2";
}
if (input[i] == "D" || input[i] == "F" || input[i] == "E") {
input[i] = "3";
}
//continue this for all the letters
return *input;
}
Я хотел иметь возможность использовать эту перегрузку в стороне от моей выходной перегрузки для вывода преобразование примерно так:
ostream& operator<<(ostream& o, const newString& p) {
for (int i = 0; i < p.size; i++) {
o << p.input[i];
}
o << endl;
return o;
}
Моя основная очень проста:
#include"newString.h"
int main() {
newString a;
cin >> a;
cout << a;
}
Однако я полагаю, что это может быть связано с тем, что функция ostream&
является функцией друга. Я знаю, что мой перегруженный []
никогда не используется, потому что установка точки останова никогда не останавливает мою программу. У меня вопрос: поскольку я должен использовать эти перегрузки для вывода преобразования, как я могу go обойти эту проблему функции друга ostream&
, не имея доступа к моей перегрузке []
? На данный момент программа игнорирует перегрузку и выводит строку так же, как она была введена.
Несколько замечаний. Мой строковый объект ввода должен быть указателем в соответствии с требованиями. input и size являются приватными членами, а перегрузка []
является членом publi c, а ostream&
- другом.
РЕДАКТИРОВАТЬ: Как предложено ниже, я изменил функцию operator<<();
, чтобы использовать p[i]
вместо p.input[i]
, потому что input является строковым типом, но мое определение использует тип newString, такой как p [i].
ostream& operator<<(ostream& o, const newString& p) {
for (int i = 0; i < p.size; i++) {
o << p[i] << endl;
}
return o;
}
, но есть ошибка для оператора []
, потому что он пытается использовать тип newString в перегрузке оператора []
вместо i
.