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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alika07
4 / 4 / 0
Регистрация: 04.12.2012
Сообщений: 39
#1

строки: работа с динамической памятью, перегруженные конструкторы - C++

17.02.2013, 22:43. Просмотров 530. Ответов 1
Метки нет (Все метки)

Привет!
Есть задача:
Разработать класс String, который в дальнейшем будет использоваться для работы со строками.
Класс должен содержать:
конструктор по умолчанию, позволяющий создать строку длиной 80 символов;
конструктор, позволяющий создавать строку произвольного размера;
конструктор, который создаёт строку и инициализирует её строкой, полученной от пользователя.
Класс должен содержать методы для ввода строк с клавиатуры и вывода строк на экран.

Совсем не могу представвить, что нужно делать с динамическими строками, как их объявлять в классе и работать с ними в конструкторе.
Единственная моя идея - это использовать malloc.
Пожалуйста, помогите разобраться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 22:43     строки: работа с динамической памятью, перегруженные конструкторы
Посмотрите здесь:

Работа с динамической памятью - C++
Привет всем. Я недавно начал изучать C++ и наткнулся на ошибку:"двумерный динам.exe вызвал срабатывание точки останова" при очистке...

Работа с динамической памятью! - C++
Привет! Такая задача: Необходимо выделить(по N Кб) и освободить всю динамическую память. Определить время выделения и освобождения, и объем...

Работа с динамической памятью в цикле - C++
Всем привет. Есть переменная data, созданная динамически На каждой итерации цикла в нее записывается информация char* data =...

Работа с динамической памятью через указатели. - C++
Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Работа с динамической памятью через указатели. Загадочная ошибка. - C++
Программа запускается и нормально исполняется, но в конце появляется ошибка. Мог бы кто подсказать в чем проблема? Пишу в Microsoft...

Работа с динамической памятью через указатели. Загадочная ошибка. - C++
Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Разобраться в принципе работы задачч. (Работа с динамической памятью через указатели. ) - C++
Вот условие задачи: Создать массив из N целых чисел, N вводит пользователь. Заполнить массив случайным образом в диапазоне от 1 до 12....

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

программа с динамической памятью - C++
текст программы #include <iostream> #include <conio.h> #include <stdlib.h> #include <iomanip> #define m 12 using namespace...

Операции с динамической памятью - C++
Есть new и delete. Можно написать так: int *a; a = new int ; Дальше, хотим удалить - пишем delete a; Вопрос такой: а если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
18.02.2013, 06:36     строки: работа с динамической памятью, перегруженные конструкторы #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
 
class String
{
    unsigned int string_size;
    char* ptr;
public:
    String(){
        string_size = 80;
        ptr = new char[string_size];   // можно, конечно, использовать malloc
        ptr[0] = '\0';
    }
    String(int _size) {
        string_size = _size;
        ptr = new char[string_size];
        ptr[0] = '\0';
    }
    String(char* str) {
        string_size = 1;
        char* curstr = str;
        while (*curstr) {
            ++curstr;
            ++string_size;
        }
        ptr = new char[string_size];
        strncpy(ptr, str, string_size);
        ptr[string_size - 1] = '\0';
    }
    ~String(){
        string_size = 0;
        delete[] ptr;
    }
    friend std::ostream& operator << (std::ostream& os, const String& s);
    friend std::istream& operator >> (std::istream& in, String& s);
};
 
std::ostream& operator << (std::ostream& os, const String& s){
    os << s.ptr;
    return os;
}
 
std::istream& operator >> (std::istream& in, String& s){
    in >> s.ptr;
    return in;
}
 
 
 
int main()
{
    String s1, s4;
    String s2(20);
    String s3("Summer");
 
    std::cout << s3 << std::endl;
    std::cin >> s1;
    std::cout << s1 << std::endl;
    std::cout << s2 << std::endl;   // пустые строки, т.к. мы их не инициализировали
    std::cout << s4 << std::endl;
    system("pause");
    return 0;
}
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru