@sddvxd

В чем здесь ошибка (перегрузка операторов)?

class String{
private:
  static int num_strings;
public:
  int len;
  char* str;
  String(const char*);
  ~String();
  ostream& operator<<(ostream&)const;
};
int String::num_strings = 0;

String::String(const char* s){
  num_strings++;
  len = strlen(s);
  str = new char[len+1];
  strcpy(str,s);
  cout<<"string "<<str<<" created, "<<num_strings<<" strings left\n";
}



String::~String(){
  num_strings--;
  delete [] str;
  cout<<"object "<<str<<" deleted, "<<num_strings<<" strings left\n";
  
}

ostream& String::operator<<(ostream& os)const{
  os<<str;
  return os;
}
int main(){

  String s = "lolz";

  cout<<s;

  cin.get();
  return 0;
}


Знаю что код неверный в плане подсчета кол-ва элементов и способен повреждать память при удалении объектов, нужно лишь понять почему при вызове перегруженного оператора << компилятор выдает кучу ошибок несовместимости типов
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Вы наладили операцию String << ostream → ostream. Надо наоборот, ostream << string → ostream.

Такую операцию можно наладить только за пределами класса (возможно, как friend).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Оператор << и любая арифметика делаются путем объявления функций вне класса
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы