Надо создать класс "Строка" так, чтобы он удовлетворял указанным условиям

Определить класс "строка" Закрытые члены класса: компонентные данные класса: указатель на char - адрес строки (для представления значения символьной строки) и целое число - количество символов в строке.

Открытые члены класса:

  • конструктор класса с одним параметром - целое число(число символов в строке) с инициализацией по умолчанию (15 символов) для создания пустой строки;
  • конструктор с одним параметром - указателем на char для создания объекта - строки с данными, определяемыми аргументами (длиной строки и значением);
  • конструктор копирования;
  • деструктор для программного уничтожения объекта;
  • метод класса: перегрузки бинарной операции '+'; преобразования типа;

Дружественные функции - перегрузка операций '[]' и включения в выходной поток '<<'.

Создать экземпляры класса, используя все три конструктора и дать примеры использования перегруженных операций. Выполнил почти все пункты, но возникают трудности с оператором индексирования

#include <cstring>
#include <iostream>
using namespace std;
class stroka {
    char* ch;                    // указатель на строку, на символьный массив
    int len;                      // длина строки
public:
    stroka(char* cch)     //конструктор 1
    {
        len = strlen(cch);
        ch = new char[len + 1];
        strcpy(ch, cch);
    }
    stroka(int N = 20)        //конструктор 2
    {
        ch = new char[N + 1];  len = 0;   ch[0] = '\0';
    }
    operator char* () { return ch; }//операции – функции преобразования
                                                       // типов.
    void vivod() // выводит данные
    {
        cout << "строка: " << ch << " ,  длина строки=" << len;
    };
    ~stroka()// деструктор
    {
        delete[]ch;
    }
    stroka operator+(stroka&);
    friend ostream& operator<<(ostream&, stroka);//дружественная функция-операция 
    friend operator[](stroka&);

};

int main()
{
   stroka s1("String");


}

Ответы (1 шт):

Автор решения: AlexGlebe

Все ошибки компилятора можно просто прочитать и выполнить. Английский язык давно учили?

stroka s1("String");

warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

решение :

stroka(char const * cch)
friend operator[](stroka&);

error: ISO C++ forbids declaration of 'operator[]' with no type [-fpermissive]

решение :

friend char & operator[](stroka&);
friend char & operator[](stroka&);

error: 'char& operator[](stroka&)' must be a non-static member function

решение :

char & operator[](int);
→ Ссылка