Реализация конструктора для класса String C++

235
04 марта 2017, 05:23

Здравствуйте, помогите пожалуйста, я встал в тупик. Мне нужно создать пользовательский класс String, унаследованный от родительского в котором реализована функция at() и перегружен оператор operator[ ].

В классе String я перегружаю несколько операторов для моих строк: +,>,<,==,!=

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

Родительский класс:

class TCharArray
{
protected:
    static const size_t LIMIT = 100;
    char str[LIMIT];
public:
    TCharArray();
    ~TCharArray();
    char & at(size_t n)
    {
        if (n >= LIMIT) throw std::out_of_range("Invalid index");
        return str[n];
    }
    char& operator[ ](size_t n)
    {
        if (n < 0 || n >= LIMIT)
        {
            std::cout << "Invalid index" << std::endl;
            exit(1);
        }
        return str[n];
    }
};

Класс String:

#include "TCharArray.h"
#include <iostream>
#include <string.h>
typedef unsigned un ;
class String : public TCharArray
{
public:
    /*String()
    {
       strcpy_s(str, "");
    }*/
    String() //Именно в этом конструкторе мне нужно сделать реализацию
    {
        char s[LIMIT];
        try { //вылавливаю исключения, если нет то..
            std::cout << "Enter smth: " << std::endl;//прошу ввести строку
            std::cin >> s[LIMIT];//ввожу 
            for (un i = 0; i < LIMIT; i++) {
                at(i);
            }
        }
        catch (std::out_of_range const& exc) {
            std::cout << exc.what() << '\n';
        }
        for (un j = 0; j < LIMIT; j++) {//вывожу 
            std::cout << at(j)<<std::endl;
        }
    }
    String::~String()
    {
        std::cout << "Exit" << std::endl;
    }
    bool operator==(String ss)const
    {
        return (strcmp(str, ss.str) == 0) ? true : false;
    }
    String operator+(String ss) const
    {
        String temp;
        if (strlen(str) + strlen(ss.str) < LIMIT)
        {
            strcpy_s(temp.str, str);
            strcat_s(temp.str, ss.str);
        }
        else
        {
            std::cout << "over!" << std::endl;
            exit(1);
        }
        return temp;
    }
    friend bool operator!= (const String &a,const String &b )
    {
        return !(a == b);
    }
     friend bool operator>(const String& a, const String& b)
    {
        return (strlen(a.str) > strlen(b.str)) ? true : false;
    }
    friend bool operator<(const String& a, const String& b)
     {
         return (strlen(a.str) < strlen(b.str)) ? true : false;
     }
};
READ ALSO
массив структур через vector.выдает ошибку. vector iterator not incrementable

массив структур через vector.выдает ошибку. vector iterator not incrementable

Делаю что-то вроде дереваСоздаю корень тогда когда добавляю новую вершину и указываю корень(у меня там проверка идет) выбивает сообщение...

210
Дихотомия. Бин поиск

Дихотомия. Бин поиск

Имеется массив 1 и 0, размером N

231
ошибка java.lang.NullPointerException

ошибка java.lang.NullPointerException

Доброго времени суток! Учусь работать в среде netbeans IDE 81 на ubuntu

264
signed int vs unsigned int (undefined behaviour ситуации)

signed int vs unsigned int (undefined behaviour ситуации)

Если говорить просто и коротко, то меня интересует: количество и примеры undefined behaviour для каждого из этих типов

316