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

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

Войти
Регистрация
Восстановить пароль
 
 
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
#1

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

25.10.2011, 14:30. Просмотров 998. Ответов 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///
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 14:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с классами. Нужна помощь с функцией (C++):

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

Работа с классами - C++
Задача:найти сумму всех отрицательных элементов матрицы и записать в вектор. For (i=0;i&lt;=N;i++) for (j=0;j&lt;=M;j++) if (a&lt;0) ...

Работа с классами - C++
Здравствуйте, я здесь первый раз, если что извините, за неккоректность, ввода или задания вопроса Я написал (например): class Figure...

Работа с классами - C++
Добрый день! Я столкнулся с проблемой которую не могу решить.Суть проблемы заключается в том что в классе Interface реализуется некая...

Работа с классами - C++
Наверно классическая задачка для тех, кто только начинает изучать классы. Есть группы и студенты. Проблема в том, что до меня не доходит,...

работа с классами - C++
помогите пожалуйста написать программу на C++: Создать класс Complex для работы с комплексными числами,который должен содержать два...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
25.10.2011, 15:05 #2
Цитата Сообщение от Spotter Посмотреть сообщение
В результате выполнения программы в обоих объектах поменять первые слова строки.
Не совсем понятно, имеется в виду обменять первые n слов обеих строк местами?
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
25.10.2011, 20:03  [ТС] #3
rangerx, Нет, одно слово. Первое слово одной строки поменять, и первое слово второй строки поменять. Я по крайне мере понял так задание.

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

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

Я думаю, что в вашем проекте класса не хватает одного члена, который задает длину символьного массива.
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
25.10.2011, 20:15  [ТС] #5
Сыроежка, На счёт деления конструкторов, это вопросы увы не ко мне, такое дали задание )) По существу, на счёт этой функции можете что-то сказать?
Сыроежка
Заблокирован
25.10.2011, 20:25 #6
Цитата Сообщение от 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;
};
и в этой функции проделать всю работу.
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
26.10.2011, 20:22  [ТС] #7
Сыроежка, Спасибо, сто вы имелли ввиду - я примерно понял. Но реализовать это думаю не получится, именно с чем-то подобным не сталкивался(( Есть ещё варианты?

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

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

Добавлено через 3 часа 53 минуты
UP///
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.10.2011, 20:30 #8
У меня этот код вообще не работает на 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);
}
Сыроежка
Заблокирован
26.10.2011, 20:32 #9
Цитата Сообщение от 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. Отсюда конфликт имен!
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.10.2011, 20:34 #10
Цитата Сообщение от Сыроежка Посмотреть сообщение
Дело в том,что в исходном коде включен заголовок <string> да к тому же указана директива using namespace std:,и в то же самое время класс пользователя также назван string. Отсюда конфликт имен!
Спасибо кэп!
Я прежде всего к ТС обращался по причине того, что его код имеет ошибки.
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
27.10.2011, 00:32  [ТС] #11
Ошибку понял, исправил. Но вопрос на счёт функции остаётся открытым, при компилировании на исправленный код, студия выдаёт 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();
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.10.2011, 00:39 #12
Цитата Сообщение от 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);
Однако тут будет утечка памяти, ибо деструктор вы не вызываете.
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
27.10.2011, 01:11  [ТС] #13
Chelioss, "Что такое firststring?" - спрашивает вас компилятор.

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

Ладно, спать пора.
У вас прототип
C++
1
void setrow(char *);
а заголовок:
C++
1
void row::setrow()
Нужно исправить на:
C++
1
void row::setrow( char *firststring )
Spotter
8 / 8 / 2
Регистрация: 09.11.2010
Сообщений: 130
27.10.2011, 14:32  [ТС] #15
Chelioss, Исправил, одна ошибка при компилировании осталась. На счёт функции нужной помогите пожалуйста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2011, 14:32
Привет! Вот еще темы с ответами:

Работа С Классами - C++
Привет Всем , Перехожу С делфи ))) Вот никак не пойму Вот Эту хрень в нутри класса Обрывок из струпа ...

Работа с классами - C++
Составить описание объектного типа TMatr, что обеспечивает размещение матрицы произвольного размера с возможностью изменения числа строк и...

Работа с классами. - C++
Или это задача такая лёгкая (на экзамене будет), или я чего-то не понимаю. В классе Pair может содержаться только 2 числа (ну и 2 метода не...

Работа с классами - C++
Привет всем!!!!! Пацаны помогите написать программу плиз, на завтро нужно!!!!! Тема: Классы Задание:Описати інтерфейс та реалізувати...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.10.2011, 14:32
Ответ Создать тему
Опции темы

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