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

массвив объектов класса - C++

Восстановить пароль Регистрация
 
Notty
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 30
23.03.2012, 20:00     массвив объектов класса #1
Доброго времени суток.

file.h
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
class oblast {
protected:
    char obl_name[20];
    char country[20];
public:
    oblast(void);
    oblast(char*,char*);
    oblast(oblast &);
    ~oblast(void);
    void obl_set(char*,char*);
    void obl_show(void);
};
 
class misce: public oblast {
protected:
    int koord_shurota;
    int koord_dovgota;
public:
    misce(void);
    misce(int,int);
    misce(misce &);
    ~misce(void);
    void getkoord(void);
    void setkoord(int,int);
};
 
 
class misto: public oblast{
protected:
    char city_name[20];
    long naselennia;
public:
    misto(void);
    misto(char*,long);
    misto(misto &);
    ~misto(void);
    void city_show(void);
    void city_set(char*,long);
};
 
class megapolis: public misto{
protected:
    char data_zasn[20];
public:
    megapolis(void);
    megapolis(char*);
    megapolis(megapolis &);
    void setdata(char*);
    void getdata(void);
    void show_all(void);
    void to_file(char*);
    void from_file(char*);
    ~megapolis(void);
};
file.cpp
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
169
170
171
172
173
174
175
176
177
#include <iostream>
#include <fstream>
#include <cstring>
#include "oblast.h"
 
 
using namespace std;
 
oblast::oblast(void)
{
    strcpy_s(obl_name," ");
    strcpy_s(country," ");
}
oblast::oblast(char *oname, char *countr)
{
    strcpy_s(obl_name,oname);
    strcpy_s(country,countr);
}
oblast::oblast(oblast &obj)
{
    strcpy_s(obl_name,obj.obl_name);
    strcpy_s(country,obj.country);
}
oblast::~oblast(void)
{
    cout<<"Деструктор: "<<obl_name<<endl;
}
void oblast::obl_show(void)
{
    cout<<"Назва областi: "<<obl_name<<endl;
    cout<<"Країна: "<<country<<endl;
}
void oblast::obl_set(char *oname, char *countr)
{
    strcpy_s(obl_name,oname);
    strcpy_s(country,countr);
}
 
misce::misce(void)
{
    koord_shurota=0;
    koord_dovgota=0;
}
misce::misce(int shurota,int dovgota)
{
    koord_shurota=shurota;
    koord_dovgota=dovgota;
}
misce::misce(misce &obj)
{
    strcpy_s(obl_name,obj.obl_name);
    strcpy_s(country,obj.country);
    koord_shurota=obj.koord_shurota;
    koord_dovgota=obj.koord_dovgota;
}
misce::~misce(void)
{
    cout << "Деструктор: Мiсце" << endl;
}
void misce::getkoord(void)
{
    cout<<"Координати широти= "<<koord_shurota<<"°"<<endl;
    cout<<"Координати довготи= "<<koord_dovgota<<"°"<<endl;
}
void misce::setkoord(int shurota,int dovgota)
{
    koord_shurota=shurota;
    koord_dovgota=dovgota;
}
 
misto::misto(void)
{
    strcpy_s(city_name," ");
    naselennia=0;
}
misto::misto(char *n,long k)
{
    strcpy_s(city_name,n);
    naselennia=k;
}
misto::misto(misto &obj)
{
    strcpy_s(obl_name,obj.obl_name);
    strcpy_s(country,obj.country);
    strcpy_s(city_name,obj.city_name);
    naselennia=obj.naselennia;
}
misto::~misto(void)
{
    cout<<"Деструктор: "<<city_name<<endl;
}
void misto::city_set(char *name,long kilk)
{
    strcpy_s(city_name,name);
    naselennia=kilk;
}
void misto::city_show(void)
{
    cout<<"Назва мiста: "<<city_name<<endl;
    cout<<"Кiлькiсть жителiв: "<<naselennia<<endl;
}
 
megapolis::megapolis(void)
{
    strcpy_s(data_zasn," ");
}
megapolis::megapolis(char *data)
{
    strcpy_s(data_zasn,data);
}
megapolis::megapolis(megapolis &obj)
{
    strcpy_s(obl_name,obj.obl_name);
    strcpy_s(country,obj.country);
    strcpy_s(city_name,obj.city_name);
    naselennia=obj.naselennia;
    strcpy_s(data_zasn,obj.data_zasn);
}
megapolis::~megapolis(void)
{
    cout<<"Деструктор: Мегаполiс"<<endl;
}
void megapolis::setdata(char *data)
{
    strcpy_s(data_zasn,data);
}
void megapolis::getdata(void)
{
    cout<<"Дата заснування: "<<data_zasn<<endl;
}
 
void megapolis::show_all(void)
{
    cout<<"Країна: "<<country<<endl;
    cout<<"Назва областi: "<<obl_name<<endl;
    cout<<"Назва мiста: "<<city_name<<endl;
    cout<<"Кiлькiсть жителiв: "<<naselennia<<endl;
    cout<<"Дата заснування: "<<data_zasn<<endl;
};
 
 
void megapolis::to_file(char *fname)
{
    ofstream file(fname);
    if(!file)
    {
        cout << "Error!" << endl;
    }
    else
    {
        file<<country<<endl;
        file<<obl_name<<endl;
        file<<city_name<<endl;
        file<<naselennia<<endl;
        file<<data_zasn<<endl;
        file.close();
    }
}
void megapolis::from_file(char *fname)
{
    ifstream file(fname);
    if(!file)
    {
        cout << "Error!" << endl;
    }
    else
    {
        file.getline(country,20);
        file.getline(obl_name,20);
        file.get();
        file.getline(city_name,20);
        file>>naselennia;
        file.get();
        file.getline(data_zasn,20);
        file.close();
    }
}
programm.cpp
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
#include <iostream>
#include <cstring>
#include "oblast.h"
 
using namespace std;
 
void main()
 
{   setlocale(LC_ALL,"Ukrainian");
    
    
    misce obj2;
    obj2.setkoord(50,30);
    obj2.getkoord();
    megapolis obj;
    obj.obl_set("Київська","Україна");
 
    obj.city_set("Київ",2814258);
    obj.setdata("482 рiк");
    obj.show_all();
    obj.to_file("1.txt");
    obj.from_file("1.txt");
 
    cin.get();
}

вот .... есть некое наследование классов, мне нужно сделать массив объектов этого класса в основной программе. например есть объект misce obj2; и megapolis obj; как вместо объявления этих объектов сделать из них массив? искал, так только находил маленикие классы с конструктором, параметры которого передать в этом массиве объктов не составляет труда. А как сделать этот массив, если у классов много методов и конструкторов с параметрами и без...)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
23.03.2012, 20:02     массвив объектов класса #2
Создайте массив указателей на объекты класса.
Или используйте std::vector.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.03.2012, 20:04     массвив объектов класса #3
объявлять массив указателей на базовый класс
C++
1
2
3
oblast** objs = new oblast[2];
objs[0] = new misce();
objs[1] = new megapolis();
Notty
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 30
23.03.2012, 20:14  [ТС]     массвив объектов класса #4
когда объекты были не в массиве, то через них было просто обращаться к методам классов:
C++
1
2
3
    obj.city_set("Київ",2814258);
    obj.setdata("482 рiк");
    obj.show_all();
а теперь как это сделать?)
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.03.2012, 20:15     массвив объектов класса #5
Notty, с помощью оператора ->
C++
1
objs[0]->city_set("Київ",2814258);
Notty
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 30
24.03.2012, 22:13  [ТС]     массвив объектов класса #6
делал все, как вы сказали, но вот что...

error C2440: 'initializing' : cannot convert from 'oblast *' to 'oblast **'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

мб я что-то делаю не так...(
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
24.03.2012, 22:15     массвив объектов класса #7
нужно сделать приведение типов через reinterpret_cast к указателю на базовый класс
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 23:25     массвив объектов класса
Еще ссылки по теме:

Массив объектов класса C++
Массив объектов класса C++
Количество объектов класса C++

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

Или воспользуйтесь поиском по форуму:
Notty
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 30
24.03.2012, 23:25  [ТС]     массвив объектов класса #8
почитал об этих приведениях типов, что-то ничего не выходит, можете показать на моем примере плз)
Yandex
Объявления
24.03.2012, 23:25     массвив объектов класса
Ответ Создать тему
Опции темы

Текущее время: 00:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru