Форум программистов, компьютерный форум CyberForum.ru

Создать класс MyString - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задан номер мобильного телефона - определить, какие цифры отсутствуют в этом номере http://www.cyberforum.ru/cpp-beginners/thread889348.html
Задан номер мобильного телефона. Определить, какие цифры отсутствуют в этом номере. Помогите!
C++ В матрице из действительных чисел найти сумму элементов в каждом столбике Помогите пожалуйста написать программу на двумерный массив. Условие: В матрице из действительных чисел найти сумму элементов в каждом столбике. Результат записать в одномерный массив. Вывести начальную матрицу и полученный одномерный массив на экран. Спасибо http://www.cyberforum.ru/cpp-beginners/thread889344.html
Динамический массив (замена элементов по правилу) C++
Помогите пожалуйста написать программу на одномерный динамический массив. Условие: Если в заданном массиве хотя бы одно значение элементов принадлежит промежутку , то все элементы, которые не принадлежат данному промежутку заменить на z. Значение x,y,z пользователь вводит с клавиатуры Использовать динамический массив. Спасибо.
C++ Рекурсия и указатель
Добрый день. Допустим, у меня есть указатель А. И равен он, допустим, 32. Вот есть у меня функция, которая чуток бегает по другим элементом. И функция рекурсивная, т.е.: 32 ---8 -----4
C++ Горячие клавиши http://www.cyberforum.ru/cpp-beginners/thread889319.html
Подскажите как сделать горячие клавиши для всей программы?? В моём случае при нажатии на 'Q' - выход из программы И при нажатии на 'E' - Пишем сообщение "123" Спасибо заранее!
C++ Составьте блок схему (Дана матрица m*n. На экран вывести матрицу, элементы которой расположены по возрастанию) Дана матрица m*n. На экран вывести матрицу, элементы которой расположены по возрастанию. решение: #include<conio.h> #include<iostream.h> #include<iomanip.h> #include<math.h> #include<string.h> #include<stdio.h> #include<stdlib.h> подробнее

Показать сообщение отдельно
Убежденный
Системный программист
 Аватар для Убежденный
14191 / 6206 / 985
Регистрация: 02.05.2013
Сообщений: 10,339
Завершенные тесты: 1
03.06.2013, 17:32     Создать класс MyString
ViktorKozlov, а можно немного критики по существу ?



C++
1
using namespace std;
"using namespace" в заголовочном файле - зло.
В результате using вносится во все файлы, которые подключают этот заголовок,
даже туда, где она совсем не нужна.



C++
1
MyString(char * _str);   //конструктор с параметром в виде строковой константы
Конструктор с одним аргументом лучше помечать, как explicit, во
избежание случайных преобразований там, где их быть не должно.
Ну и здесь принято указывать const: "char const *_str", ведь
аргумент не изменяется.



C++
1
MyString(MyString& s);   //конструктор копирования
То же самое: где const ? Используя конструктор копирования с такой сигнатурой,
вы не сможете проинициализировать объект константой:
C++
1
2
MyString const str1;
MyString str2(str1); // ошибка !


C++
1
2
3
void Print();                   //метод печати строки на экран
bool Find(char *_str);          //метод поиска подстроки в строке
bool FindSymbol(char symbol);   //метод поиска символа в строке
Концептуально, эти методы в классе строки лишние.
MyString должен выполнять только свои прямые обязанности - хранение
строки, доступ к ней, обеспечение элементарных операций, остальное - это
уже из области алгоритмов. Кстати, а где метод size или length ?



C++
1
2
3
MyString operator+(MyString& s);  //операция + для склеивания двух строк
MyString& operator=(MyString &s); //операция = (присвоение строк)
MyString& operator+=(MyString &s);//операция += для склеивания двух строк
Где const ?



C++
1
MyString operator^(int value);
Это что за метод ?
Вообще, перегруженные операторы (да и вообще любые функции/методы/интерфейсы)
должны выполнять интуитивно понятные действия, см. "принцип наименьшего удивления".
Этот оператор непонятен. Что происходит в выражении "str^5" ? Волосы дыбом



C++
1
char& operator[](int value);  //операция [] для доступа к отдельным символам строки
Тип индекса лучше брать size_t. И опять позанудствую - где const-версия ?
Без нее вы не сможете читать символы константной строки.



C++
1
MyString::MyString():str(new char[1]){str[0]=0;}
А можно ли обойтись без выделения памяти для пустой строки ?



C++
1
2
3
4
5
6
7
MyString& MyString::operator=(MyString& s)
{
    delete[] this->str;       
    this->str=new char[strlen(s.str)+1];
    strcpy(this->str,s.str);
    return *this;
}
Некорректно. Нет проверки на присваивание самому себе.
Проверьте:
C++
1
2
MyString str("abcde");
str = str; // Что будет в str, как думаете ?
 
Текущее время: 23:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru