-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
1

Создать класс адрес

09.03.2011, 22:35. Показов 3684. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
застрял на этой теме! спасите пожалуйста!
классы и объекты в с++

адрес
страна-char*
город-char*
улица-char*
номер дома-int

 Комментарий модератора 
В следующий раз кричащее выделение текста будет наказываться
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2011, 22:35
Ответы с готовыми решениями:

Создать класс «Адрес»
Создать класс «Адрес». Данные класса - город, улица, номер дома и номер квартиры. Создать...

Создать класс Адрес с информацией
создать класс Адрес с информацией имя-char* улица-char* номер дома -int я набросал такую прогу...

Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки машин ”: марка
Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название...

Создать класс RIELTER, с полями в закрытой части: количество комнат, этаж; площадь; адрес
Создать класс RIELTER, с полями в закрытой части: количество комнат, этаж; площадь; адрес. Класс...

19
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.03.2011, 22:54 2
garikkk1, Сотни раз ведь на форуме было...
Ну да ладно. Вспомню char*...

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
#include <iostream>
#include <cstring>
 
class Addr
{
public:
    Addr(char* country_="Russia", 
        char* town_="Moscow",
        char* street_="Arbat",
        int h_n=40)
    {
        country=new char[strlen(country_)+1];
        strcpy(country, country_);
        town=new char[strlen(town_)+1];
        strcpy(town, town_);
        street=new char[strlen(street_)+1];
        strcpy(street, street_);
        h_number=h_n;
    }
    ~Addr()
    {
        delete[] country;
        delete[] town;
        delete[] street;
    }
    void SetCountry(char* country_)
    {
        country=new char[strlen(country_)+1];
        strcpy(country, country_);
    }
    void SetTown(char* town_)
    {
        town=new char[strlen(town_)+1];
        strcpy(town, town_);
    }
    void SetStreet(char* street_)
    {
        street=new char[strlen(street_)+1];
        strcpy(street, street_);
    }
    void SetHNumber(int h_n)
    {
        h_number=h_n;
    }
    void SetAddr(char* country_, char* town_, char* street_, int h_n)
    {
        SetCountry(country_);
        SetTown(town_);
        SetStreet(street_);
        SetHNumber(h_n);
    }
    char* GetCountry() const
    {
        return country;
    }
    char* GetTown() const
    {
        return town;
    }
    char* GetStreet() const
    {
        return street;
    }
    int GetHNumber() const
    {
        return h_number;
    }
private:
    char* country;
    char* town;
    char* street;
    int h_number;
};
 
int main()
{
    Addr new_addr;
    std::cout<<new_addr.GetCountry()<<'\n'<<
        new_addr.GetTown()<<'\n'<<
        new_addr.GetStreet()<<'\n'<<
        new_addr.GetHNumber()<<'\n';
    return 0;
}
1
-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
09.03.2011, 23:00  [ТС] 3
ОГРОМНОЕ спасибо! сейчас ток проверю!

Добавлено через 3 минуты
пару недочетов но пустяки главное суть уловил!
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.03.2011, 23:03 4
garikkk1, А недочеты можно сказать?) Даже интересно стало)
0
-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
09.03.2011, 23:07  [ТС] 5
1) не все библиотеки
2) вывод не останавливается
3) я сделал ввод с клавы улицы страны и т.д

говорю пустяки ))

можешь немного комментариев вставить пожалуйсто
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.03.2011, 23:11 6
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
#include <iostream>
#include <cstring>
 
class Addr
{
public:
//Конструктор. Можно использовать и по умолчанию и с параметрами
        Addr(char* country_="Russia", 
                char* town_="Moscow",
                char* street_="Arbat",
                int h_n=40)
        {
//Выделяем память.
                country=new char[strlen(country_)+1];
//Копируем.
                strcpy(country, country_);
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
                h_number=h_n;
        }
//Деструктор. Очищаем память.
        ~Addr()
        {
                delete[] country;
                delete[] town;
                delete[] street;
        }
//Раздел сеттеров (установка значений в поля, принцип тот же что и в конструкторе, 
//выделяем память (копируем), тут еще можно везде удаление впринципе вставить, но этим 
//займись сам.
        void SetCountry(char* country_)
        {
                country=new char[strlen(country_)+1];
                strcpy(country, country_);
        }
        void SetTown(char* town_)
        {
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
        }
        void SetStreet(char* street_)
        {
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
        }
        void SetHNumber(int h_n)
        {
                h_number=h_n;
        }
        void SetAddr(char* country_, char* town_, char* street_, int h_n)
        {
                SetCountry(country_);
                SetTown(town_);
                SetStreet(street_);
                SetHNumber(h_n);
        }
//Раздел геттеров. Для получения значения поля.
        char* GetCountry() const
        {
                return country;
        }
        char* GetTown() const
        {
                return town;
        }
        char* GetStreet() const
        {
                return street;
        }
        int GetHNumber() const
        {
                return h_number;
        }
private:
        char* country;
        char* town;
        char* street;
        int h_number;
};
 
int main()
{
        Addr new_addr;
        std::cout<<new_addr.GetCountry()<<'\n'<<
                new_addr.GetTown()<<'\n'<<
                new_addr.GetStreet()<<'\n'<<
                new_addr.GetHNumber()<<'\n';
        return 0;
}
0
-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
09.03.2011, 23:16  [ТС] 7
напомни надо вроде вставить куда-то (стрелочку)
указатель_на_объект_класса -> имя элемента

и что значит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
                country=new char[strlen(country_)+1];
                strcpy(country, country_);
        }
        void SetTown(char* town_)
        {
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
        }
        void SetStreet(char* street_)
        {
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
        }
        void SetHNumber(int h_n)
        {
                h_number=h_n;
        }
Добавлено через 1 минуту
C++
1
 country=new char[strlen(country_)+1]
вот +1 что значит сдесь
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.03.2011, 23:26 8
garikkk1, strlen возвращает длину строки без завершающего ноль-символа. а новую строку хотелось бы получить с нулем в конце. Поэтому +1 символ)
1
-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
09.03.2011, 23:28  [ТС] 9
а что такое - геттеры и сеттеры?
и зачем вместо одной переменной писать- h_n?
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
09.03.2011, 23:39 10
ForEveR, Поро такой маленький совет слышал? : "Где только можно используйте const" (От греха подальше.. =) )
0
-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
09.03.2011, 23:45  [ТС] 11
Цитата Сообщение от ISergey Посмотреть сообщение
ForEveR, Поро такой маленький совет слышал? : "Где только можно используйте const" (От греха подальше.. =) )
я не понял вместо чего ты собрался подставлять const
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
10.03.2011, 00:18 12
Цитата Сообщение от garikkk1 Посмотреть сообщение
я не понял вместо чего ты собрался подставлять const
Не вместо, а где....
C++
1
2
3
4
5
....
Addr(const char* country_="Russia", const char* town_="Moscow", const char* street_="Arbat" ...
....
const char* GetCountry() const
....
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.03.2011, 00:26 13
ISergey, Да протупил. В конструкторе. Да и в сетерах по сути)

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
#include <iostream>
#include <cstring>
 
class Addr
{
public:
//Конструктор. Можно использовать и по умолчанию и с параметрами
        Addr(const char* country_="Russia", 
                const char* town_="Moscow",
                const char* street_="Arbat",
                const int h_n=40)
        {
//Выделяем память.
                country=new char[strlen(country_)+1];
//Копируем.
                strcpy(country, country_);
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
                h_number=h_n;
        }
//Деструктор. Очищаем память.
        ~Addr()
        {
                delete[] country;
                delete[] town;
                delete[] street;
        }
//Раздел сеттеров (установка значений в поля, принцип тот же что и в конструкторе, 
//выделяем память (копируем), тут еще можно везде удаление впринципе вставить, но этим 
//займись сам.
        void SetCountry(const char* country_)
        {
                country=new char[strlen(country_)+1];
                strcpy(country, country_);
        }
        void SetTown(const char* town_)
        {
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
        }
        void SetStreet(const char* street_)
        {
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
        }
        void SetHNumber(const int h_n)
        {
                h_number=h_n;
        }
        void SetAddr(const char* country_, const char* town_, const char* street_, const int h_n)
        {
                SetCountry(country_);
                SetTown(town_);
                SetStreet(street_);
                SetHNumber(h_n);
        }
//Раздел геттеров. Для получения значения поля.
        const char* GetCountry() const
        {
                return country;
        }
        const char* GetTown() const
        {
                return town;
        }
        const char* GetStreet() const
        {
                return street;
        }
        const int GetHNumber() const
        {
                return h_number;
        }
private:
        char* country;
        char* town;
        char* street;
        int h_number;
};
 
int main()
{
        Addr new_addr;
        std::cout<<new_addr.GetCountry()<<'\n'<<
                new_addr.GetTown()<<'\n'<<
                new_addr.GetStreet()<<'\n'<<
                new_addr.GetHNumber()<<'\n';
        return 0;
}
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
10.03.2011, 00:28 14
Здесь не нужно.
C++
1
 const int h_n=40
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.03.2011, 00:30 15
ISergey, Не критично) По сути не нужно, но пускай будет)
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
10.03.2011, 01:17 16
ForEveR, а где конструктор копий и оператор присваивания? И почему все твои сеттеры не освобождают ранее выделенную память?
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.03.2011, 01:50 17
rangerx, Потому что писал наспех))
Если доводить до ума, то копир, присваивание, слежка за памятью конечно нужны.

Добавлено через 26 минут
Я думаю теперь можно сказать, что программа доведена до ума?)

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
168
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
 
class Addr
{
public:
//Конструктор. Можно использовать и по умолчанию и с параметрами
        Addr()
        {
            Default_Init();
        }
        Addr(const char* country_, 
                const char* town_,
                const char* street_,
                const int h_n)
        {
//Выделяем память.
                country=new char[strlen(country_)+1];
//Копируем.
                strcpy(country, country_);
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
                h_number=h_n;
        }
        Addr(const Addr& other)
        {
                country=new char[strlen(other.country)+1];
                strcpy(country, other.country);
                town=new char[strlen(other.town)+1];
                strcpy(town, other.town);
                street=new char[strlen(other.street)+1];
                strcpy(street, other.street);
                h_number=other.h_number;
        }
//Деструктор. Очищаем память.
        ~Addr()
        {
                delete[] country;
                delete[] town;
                delete[] street;
        }
        Addr& operator =(const Addr& other)
        {
            if(this == &other)
                return *this;
            delete[] country;
            delete[] town;
            delete[] street;
            country=new char[strlen(other.country)+1];
            strcpy(country, other.country);
            town=new char[strlen(other.town)+1];
            strcpy(town, other.town);
            street=new char[strlen(other.street)+1];
            strcpy(street, other.street);
            h_number=other.h_number;
            return *this;
        }
//Раздел сеттеров (установка значений в поля, принцип тот же что и в конструкторе, 
//выделяем память (копируем), тут еще можно везде удаление впринципе вставить, но этим 
//займись сам.
        void SetCountry(const char* country_)
        {
                delete[] country;
                country=new char[strlen(country_)+1];
                strcpy(country, country_);
        }
        void SetTown(const char* town_)
        {
                delete[] town;
                town=new char[strlen(town_)+1];
                strcpy(town, town_);
        }
        void SetStreet(const char* street_)
        {
                delete[] street;
                street=new char[strlen(street_)+1];
                strcpy(street, street_);
        }
        void SetHNumber(const int h_n)
        {
                h_number=h_n;
        }
        void SetAddr(const char* country_, const char* town_, const char* street_, const int h_n)
        {
                SetCountry(country_);
                SetTown(town_);
                SetStreet(street_);
                SetHNumber(h_n);
        }
//Раздел геттеров. Для получения значения поля.
        const char* GetCountry() const
        {
                return country;
        }
        const char* GetTown() const
        {
                return town;
        }
        const char* GetStreet() const
        {
                return street;
        }
        const int GetHNumber() const
        {
                return h_number;
        }
private:
        char* country;
        char* town;
        char* street;
        int h_number;
 
        void Default_Init()
        {
                const char* def_country="Russia";
                const char* def_town="Moscow";
                const char* def_street="Arbat";
                const int def_h_number=40;
 
                country=new char[strlen(def_country)+1];
                strcpy(country, def_country);
                town=new char[strlen(def_town)+1];
                strcpy(town, def_town);
                street=new char[strlen(def_street)+1];
                strcpy(street, def_street);
                h_number=def_h_number;
        }
};
 
std::ostream& operator <<(std::ostream& os, const Addr& one)
{
    os<<one.GetCountry()<<'\n'<<
        one.GetTown()<<'\n'<<
        one.GetStreet()<<'\n'<<
        one.GetHNumber()<<'\n';
    return os;
}
 
std::istream& operator >>(std::istream& is, Addr& one)
{
    const int max_size=256;
    char str[max_size];
    is.getline(str, max_size);
    char* country=new char[strlen(str)+1];
    strcpy(country, str);
    is.getline(str, max_size);
    char* town=new char[strlen(str)+1];
    strcpy(town, str);
    is.getline(str, max_size);
    char* street=new char[strlen(str)+1];
    strcpy(street, str);
    int h_n=0;
    is>>h_n;
    is.get();
    one.SetAddr(country, town, street, h_n);
    return is;
}
 
int main()
{
    std::vector<Addr> advec((std::istream_iterator<Addr>(std::cin)), std::istream_iterator<Addr>());
    std::copy(advec.begin(), advec.end(), std::ostream_iterator<Addr>(std::cout, "\n"));
    return 0;
}
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
10.03.2011, 02:49 18
Цитата Сообщение от ForEveR Посмотреть сообщение
Я думаю теперь можно сказать, что программа доведена до ума?)
К чему придраться всё же есть.
1) Конструктор с параметрами по умолчанию убирать было вовсе не обязятельно
2) Дублирование кода:
C++
1
2
3
 // код такого вида повторяется очень часто 
street=new char[strlen(street_)+1];
strcpy(street, street_);
C++
1
2
3
delete[] country;
delete[] town;
delete[] street;
3) И если уж действительно доводить до ума, то исключение, которое может выбросить оператор new в конструкторе тоже не мешало бы обработать, иначе будет утечка(для неуспешно созданных объектов деструкторы не вызываются).
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.03.2011, 16:23 19
rangerx, Ну да. Тоже верно.
1) Подумал, что так будет логичнее)
2) Да, функцию для этого написать было бы неплохо.
3) Ммм... Да. Стоит отлавливать, спасибо)
0
-17 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 44
10.03.2011, 20:41  [ТС] 20
так какой из всех выше перечисленных вариантов является правильным?
0
10.03.2011, 20:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2011, 20:41
Помогаю со студенческими работами здесь

Создать класс "Адрес", имеющий элементы-данные и функцию печати
Создать класс, имеющий элементы-данные и функцию печати. АДРЕС (имя – char *, улица – char *,...

Создать класс "ведомость абитуриентов" (ФИО, адрес, оценки по трем предметам)
Создать класс, в котором определены поля и методы класса: конструктор с параметрами, конструктор...

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени,...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru