Здравствуйте, помогите пожалуйста, я встал в тупик.
Мне нужно создать пользовательский класс 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;
}
};
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Делаю что-то вроде дереваСоздаю корень тогда когда добавляю новую вершину и указываю корень(у меня там проверка идет) выбивает сообщение...
Доброго времени суток! Учусь работать в среде netbeans IDE 81 на ubuntu
Если говорить просто и коротко, то меня интересует: количество и примеры undefined behaviour для каждого из этих типов