Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240

Работа с классами. Нужна помощь с функцией

25.10.2011, 14:30. Показов 1902. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер! Вот задание:

Разработать класс содержащий:
- компоненты данные
- методы:
а) конструктор по умолчанию;
б) конструктор с параметрами;
в) конструктор копирования;
г) деструктор;
д) методы класса для работы с данными.
Данные класса должны иметь атрибут private.

Создать 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
 
#define MAX_LEN 256
 
class string {
public:
    string();
    string(char *);
    string(string const&);
 
    void setstring(char *);
    void change();
    void stringprint();
 
    ~string();
private:
    char *str;
};
 
string::string()
: str(NULL) {} 
 
string::string(char *firststring)
{
    str = new char [strlen(firststring) + 1];
    strcpy(str, firststring);
}
 
string::string(string const& existingObj)
{
    str = new char [strlen(existingObj.str) +1];
    strcpy(str, exsistingObj.str);
}
 
 
void string::setstring()
{
    str = new char [strlen(firststring) + 1];
    strcpy(str, firststring);
}
 
void string::change()
{
}
 
void stringprint()
{
    if(str)
        cout<<"  "<<str<<endl;
    else
        cout<<"  String is empty!\n";
}
 
string::~string()
{
    if(str)
        delete [] str;
}
 
int main()
{
    string obj1;
    char bufer [MAX_LEN], *str = "I'm Yura student!";
    string obj2(str);
 
    cout<<"\n\nObject_1. Enter string:\n\n    ";
    cin.getline(bufer, MAX_LEN);
    obj1.setstring(bufer);
 
 
    cout<<"\n\nObject_1 first:\n  ";
    obj1.stringprint();
    cout<<"\n\nObject_2 first:\n  ";
    obj2.stringprint();
 
    obj1.change();
    obj2.change();
 
    cout<<"\n\nObject_1 after:\n  ";
    obj1.stringprint();
    cout<<"\n\nObject_2 after:\n  ";
    obj2.stringprint();
    getch();
}
Добавлено через 50 минут
UP///

Добавлено через 14 часов 9 минут
UP///
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2011, 14:30
Ответы с готовыми решениями:

Нужна помощь с функцией
Подскажите, пожалуйста, как с помощью функции отсортировать введенные пользователем слова по количеству согласных букв в этих же словах?

Работа с файлами. Нужна помощь
Здравствуйте! Помогите разобраться вот в каком вопросе. Я хочу следующие: допустим запускаешь программу, в окне есть кнопка, нажимаешь на...

Работа со строками. Очень нужна помощь.
Помогите решить пожалуйста задачу :Задана строка символов, в которой записано двоичное число в модифицированном дополнительном...

18
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.10.2011, 15:05
Цитата Сообщение от Spotter Посмотреть сообщение
В результате выполнения программы в обоих объектах поменять первые слова строки.
Не совсем понятно, имеется в виду обменять первые n слов обеих строк местами?
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
25.10.2011, 20:03  [ТС]
rangerx, Нет, одно слово. Первое слово одной строки поменять, и первое слово второй строки поменять. Я по крайне мере понял так задание.

Добавлено через 1 час 30 минут
up///

Добавлено через 3 часа 20 минут
UP///
0
Заблокирован
25.10.2011, 20:09
Между прочим конструктор по умолчанию может иметь параметры! Так что деление в вашем задание конструкторов на конструктор по умолчанию и конструктор с параметрами не совсем корректное.

Я думаю, что в вашем проекте класса не хватает одного члена, который задает длину символьного массива.
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
25.10.2011, 20:15  [ТС]
Сыроежка, На счёт деления конструкторов, это вопросы увы не ко мне, такое дали задание )) По существу, на счёт этой функции можете что-то сказать?
0
Заблокирован
25.10.2011, 20:25
Цитата Сообщение от Spotter Посмотреть сообщение
Сыроежка, На счёт деления конструкторов, это вопросы увы не ко мне, такое дали задание )) По существу, на счёт этой функции можете что-то сказать?
С помощью стандартной функции strtok ( если я ее правильно называю ) находите в каждой строке первые слова. Вычисляете их длину. Затем смотрите, достаточно ли у вас места в каждой объекте для сохранения слова из другого объекта. Если не достаточно, то заново выделяете память.

А затем копируете слово из одной строки в другую.

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

Например,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class string {
public:
        string();
        string(char *);
        string(string const&);
 
        void setstring(char *);
        void change();
        void stringprint();
 
        ~string();
        friend swap_first_word( string &lhs, string &rhs );
private:
        char *str;
};
и в этой функции проделать всю работу.
1
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
26.10.2011, 20:22  [ТС]
Сыроежка, Спасибо, сто вы имелли ввиду - я примерно понял. Но реализовать это думаю не получится, именно с чем-то подобным не сталкивался(( Есть ещё варианты?

Добавлено через 1 час 50 минут
UP///

Добавлено через 16 часов 53 минуты
UP///

Добавлено через 3 часа 53 минуты
UP///
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
26.10.2011, 20:30
У меня этот код вообще не работает на Visual Studio 2008. Походу ТС не знает о существовании стандартного класса string. Хотя включил его в проект, да и еще написал using namespace std;
Гениально!

Добавлено через 2 минуты
Отличный копипаст.
C++
1
2
3
4
5
void string::setstring()
{
        str = new char [strlen(firststring) + 1];
        strcpy(str, firststring);
}
0
Заблокирован
26.10.2011, 20:32
Цитата Сообщение от Chelioss Посмотреть сообщение
У меня этот код вообще не работает на Visual Studio 2008. Походу ТС не знает о существовании стандартно класса string. Хотя включил его в проект, да и еще написал using namespace std;
Гениально!

Добавлено через 2 минуты
Что это такое?
C++
1
2
3
4
5
void string::setstring()
{
        str = new char [strlen(firststring) + 1];
        strcpy(str, firststring);
}
Дело в том,что в исходном коде включен заголовок <string> да к тому же указана директива using namespace std:,и в то же самое время класс пользователя также назван string. Отсюда конфликт имен!
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
26.10.2011, 20:34
Цитата Сообщение от Сыроежка Посмотреть сообщение
Дело в том,что в исходном коде включен заголовок <string> да к тому же указана директива using namespace std:,и в то же самое время класс пользователя также назван string. Отсюда конфликт имен!
Спасибо кэп!
Я прежде всего к ТС обращался по причине того, что его код имеет ошибки.
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
27.10.2011, 00:32  [ТС]
Ошибку понял, исправил. Но вопрос на счёт функции остаётся открытым, при компилировании на исправленный код, студия выдаёт 4 ошибки.

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
 
#define MAX_LEN 256
 
class row {
public:
        row();
        row(char *);
        row(row const&);
 
        void setrow(char *);
        void change();
        void rowprint();
 
        ~row();
private:
        char *str;
};
 
row::row()
: str(NULL) {} 
 
row::row(char *firststring)
{
        str = new char [strlen(firststring) + 1];
        strcpy(str, firststring);
}
 
row::row(row const& existingObj)
{
        str = new char [strlen(existingObj.str) +1];
        strcpy(str, exsistingObj.str);
}
 
 
void row::setrow()
{
        str = new char [strlen(firststring) + 1];
        strcpy(str, firststring);
}
 
void row::change()
{
}
 
void rowprint()
{
        if(str)
                cout<<"  "<<str<<endl;
        else
                cout<<"  String is empty!\n";
}
 
row::~row()
{
        if(str)
                delete [] str;
}
 
int main()
{
        row obj1;
        char bufer [MAX_LEN], *str = "I'm Yura student!";
        row obj2(str);
 
        cout<<"\n\nObject_1. Enter string:\n\n    ";
        cin.getline(bufer, MAX_LEN);
        obj1.row(bufer);
 
 
        cout<<"\n\nObject_1 first:\n  ";
        obj1.rowprint();
        cout<<"\n\nObject_2 first:\n  ";
        obj2.rowprint();
 
        obj1.change();
        obj2.change();
 
        cout<<"\n\nObject_1 after:\n  ";
        obj1.rowprint();
        cout<<"\n\nObject_2 after:\n  ";
        obj2.rowprint();
        getch();
}
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
27.10.2011, 00:39
Цитата Сообщение от Spotter Посмотреть сообщение
row::row(row const& existingObj)
{
str = new char [strlen(existingObj.str) +1];
strcpy(str, exsistingObj.str);
}
Разве не видно, что имена у вас разные?
exsistingObj и existingObj

C++
1
2
3
4
5
void row::setrow()
{
        str = new char [strlen(firststring) + 1];
        strcpy(str, firststring);
}
"Что такое firststring?" - спрашивает вас компилятор.
C++
1
 obj1.row(bufer);
Правильно так:
C++
1
 obj1.row::row(bufer);
Однако тут будет утечка памяти, ибо деструктор вы не вызываете.
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
27.10.2011, 01:11  [ТС]
Chelioss, "Что такое firststring?" - спрашивает вас компилятор.

Ошибок в это плане вроде компилятор не выдаёт. Исправил ошибку с "exsistingObj и existingObj". Помогите пожалуйста всё до ума довести.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
27.10.2011, 01:48
А вы можете ответить на вопрос, что такое firststring? Я знаю, что это набор символов, которые ничего не значат. Ни больше, ни меньше.

Ладно, спать пора.
У вас прототип
C++
1
void setrow(char *);
а заголовок:
C++
1
void row::setrow()
Нужно исправить на:
C++
1
void row::setrow( char *firststring )
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
27.10.2011, 14:32  [ТС]
Chelioss, Исправил, одна ошибка при компилировании осталась. На счёт функции нужной помогите пожалуйста.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
27.10.2011, 14:44
Цитата Сообщение от Spotter Посмотреть сообщение
На счёт функции нужной помогите пожалуйста.
Где твои наработки, что не получается?
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
27.10.2011, 17:25  [ТС]
rangerx, Наработок именно этой функции нет, поэтому и обратился за помощью.
0
30 / 21 / 11
Регистрация: 09.11.2010
Сообщений: 240
29.10.2011, 16:10  [ТС]
UP///
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
29.10.2011, 19:16
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
 
#define MAX_LEN 256
 
class row {
public:
    row();
    row(char *);
    row(row const&);
 
    void setrow(char *);
    void swap_first_word( row &second_string );
    void rowprint();
 
    ~row();
private:
    char *str;
    int size;
};
 
row::row()
: str(NULL), size( 0 ) {} 
 
row::row(char *firststring)
{   
    if( firststring )
    {
        size = strlen( firststring ) + 1;
        str = new char[ size ];
        strcpy( str, firststring );
    }
    else
    {
        str = NULL;
        size = 0;
    }
}
 
row::row(row const& exsistingObj)
: size( exsistingObj.size )
{
    if( size )
    {
        str = new char [ size ];
        strcpy( str, exsistingObj.str );
    }
    else
    {
        str = NULL;
        size = 0;
    }
 
}
 
 
void row::setrow( char *firststring )
{
    if( str )
        delete [] str;
    size = strlen( firststring ) + 1;
    str = new char [ size ];
    strcpy( str, firststring );
}
 
void row::swap_first_word( row &second_string )
{
    if( size || second_string.size )
    {
        char *new_first_string_ptr = new char[ size + second_string.size ]; // создаем строку для новой версии первой строки
        char *new_second_string_ptr = new char[ size + second_string.size ]; // создаем строку для новой версии второй строки
        char *new_first_ptr = new_first_string_ptr;
        char *new_second_ptr = new_second_string_ptr;
        *new_first_ptr = 0;
        *new_second_ptr = 0;
 
        char *second_ptr = NULL;
        for( second_ptr = second_string.str; *second_ptr == ' ' && *second_ptr != 0; ++second_ptr, ++new_second_ptr )
            *new_second_ptr = *second_ptr;  // копируем все пробелы из первой строки в новую версию первой строки
        char *first_ptr = NULL;
        for( first_ptr = str; *first_ptr == ' ' && *first_ptr != 0; ++first_ptr, ++new_first_ptr )
            *new_first_ptr = *first_ptr; // копируем все пробелы из второй строки в новую версию второй строки
        
        for( ; *second_ptr != ' ' && *second_ptr != 0; ++second_ptr, ++new_first_ptr )
            *new_first_ptr = *second_ptr; // добовляем в новую версию первой строки первое слово второй строки
        for( ; *first_ptr != ' ' && *first_ptr != 0; ++first_ptr, ++new_second_ptr )
            *new_second_ptr = *first_ptr; // добовляем в новую версию второй строки первое слово первой строки
 
        if( second_ptr )
            strcpy( new_first_ptr, first_ptr ); // оставшуюся часть первой строки добовляем в новую версию первой строки
        if( first_ptr )
            strcpy( new_second_ptr, second_ptr ); // оставшуюся часть второй строки добовляем в новую версию второй строки
 
        delete [] str;
        delete [] second_string.str;
 
        if( new_first_string_ptr != 0 ) 
        {
            size = strlen( new_first_string_ptr ) + 1;
            str = new char[ size ];
            strcpy( str, new_first_string_ptr );
        }
        else 
        {
            str = NULL;
            size = 0;
        }
        
        if( new_second_string_ptr != 0 )
        {
            second_string.size = strlen( new_second_string_ptr ) + 1;
            second_string.str = new char[ second_string.size ];
            strcpy( second_string.str, new_second_string_ptr );
        }
        else
        {
            str = NULL;
            size = 0;
        }
 
        delete [] new_first_string_ptr;
        delete [] new_second_string_ptr;
            
    }
}
 
void row::rowprint()
{
     if( str)
        cout<<"  "<<str<<endl;
     else
        cout<<"  String is empty!\n";
}
 
row::~row()
{
     if( size )
        delete [] str;
}
 
int main()
{
    row obj1;
    char bufer [MAX_LEN], *str = "I'm Yura student!";
    row obj2(str);
 
    cout<<"\n\nObject_1. Enter string:\n\n    ";
    cin.getline(bufer, MAX_LEN);
    obj1.setrow(bufer);
 
 
    cout<<"\n\nObject_1 first:\n  ";
    obj1.rowprint();
    cout<<"\n\nObject_2 first:\n  ";
    obj2.rowprint();
 
    obj1.swap_first_word(obj2);
 
    cout<<"\n\nObject_1 after:\n  ";
    obj1.rowprint();
    cout<<"\n\nObject_2 after:\n  ";
    obj2.rowprint();
    _getch();
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2011, 19:16
Помогаю со студенческими работами здесь

СРОЧНО НУЖНА ПОМОЩЬ! Нужна информация о тест оборудовании
Доброго времени суток! Интересует информация (книги, статьи, научные статьи, сайты, зарубежная приветствуется) о проектировании...

Нужна программа с классами
Здравствуйте. Нужна программа с классами, и пояснением что она делает.. абсолютно любая и рабочая Заранее спасибо!

Нужна подсказка к задаче по работе с классами
задание - Определите классы: &quot;Фигура&quot;, &quot;Прямоугольник&quot;, &quot;Треугольник&quot;, &quot;Круг&quot; Круг, Прямоугольник (Rectangle) и Треугольник (Triangle)...

Работа с классами
плиз помогите решить нужно написать функции которыи будут выполнять сложение, вычитание, умножение и деление допустим d1 и d3 вот то...

Работа с классами
Программа работает некорректно... не выводит студентов введенных с клавиатуры.... :( выводит только и сравнивает только этих: ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru