Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Массив классов


Автор: Павлуха 2.10.2006, 21:26
Вот какая проблема..........Если в этой программе создавать не массив объектов а один объект всё работает нормально, если массив(как здесь)-выводит ерунду........Что делать и какая специфика при работе с массивом объектов????
Код

#include <iostream.h>
#include <string.h>
class book
{    protected:
    char avtor[20];
    char name[20];
public:
    void set(char* a, char* n){strcpy(avtor,a); strcpy(name,n);}
    void print()
    {
        cout<<avtor<<'\n'<<name;
    }};
class book2:public book
{
    int year;
    char isd[20];
    int kol;
    int kosht;
    public:
    void set(int y, char* i, int k,int c )
    {year=y; strcpy(isd,i); kol=k; kosht=c;}
    void print()
    {
        
        cout<<'\n'<<year<<'\n'<<isd<<'\n'<<kol<<'\n'<<kosht;
    }};
void main()
{
int s,y,k,c;
char a[20], n[20], i[20];
book ob[10];
book2 obb[10];
cout<<"AVTOR";
cin>>a;
cout<<"NAME";
cin>>n;
cout<<"YEAR";
cin>>y;
cout<<"ISD-VO";
cin>>i;
cout<<"KOL_VO";
cin>>k;
cout<<"CENA";
cin>>c;
for (s=0;s<10;s++)
{
ob[s].set(a,n);
obb[s].set(y,i,k,c);
}
ob[s].print();
obb[s].print();
}


Автор: Daevaorn 2.10.2006, 21:35
Цитата(Павлуха @  2.10.2006,  22:26 Найти цитируемый пост)
ob[s].print();
obb[s].print();

Это и не будет работать. У тебя всего 10 элементов, а ты тут к 11му обращаешься

Hint:
Цитата(Павлуха @  2.10.2006,  22:26 Найти цитируемый пост)
void main()
{

Лучше
Код

int main()
{
   //...
   return 0;
}


Автор: triclosan 2.10.2006, 21:38
Хочу добавить, что лучше вместо массивов объектов использовать колекции, векторы, к примеру. Кстати, подобных проблем в таком случае не возникнит.

Автор: Павлуха 2.10.2006, 22:14
Ой согласен затупил но вот и при таакой раскладке не хочет создавать 2 объекта, я пишу 2 книги а он сканит только одну и сразу же выводит ее на экран и 2 раза, что-то я не могу догнать в чём дело....
Код

void main()
{
int s,y,k,c,e=0;
char a[20], n[20], i[20];
book ob[10];
book2 obb[10];
cout<<"Vvedite kol-vo knig";cin>>e;
cout<<"AVTOR";cin>>a;
cout<<"NAME";cin>>n;
cout<<"YEAR";cin>>y;
cout<<"ISD-VO";cin>>i;
cout<<"KOL_VO";cin>>k;
cout<<"CENA";cin>>c;
for (s=0;s<e;s++)
{
ob[s].set(a,n);
obb[s].set(y,i,k,c);
}
for (s=0;s<e;s++)
{
ob[s].print();
obb[s].print();
}
}





Автор: Daevaorn 2.10.2006, 23:59
Цитата(Павлуха @  2.10.2006,  23:14 Найти цитируемый пост)
Ой согласен затупил но вот и при таакой раскладке не хочет создавать 2 объекта

Он и создает 2, только из одних введенных данных. Как вариант:
Код

void main()
{
int s,y,k,c,e=0;
char a[20], n[20], i[20];
book ob[10];
book2 obb[10];
cout<<"Vvedite kol-vo knig";cin>>e;
е = ( е <=20 ) ? e : 20;
for( s = 0; s < e; ++s )
{
cout<<"AVTOR";cin>>a;
cout<<"NAME";cin>>n;
cout<<"YEAR";cin>>y;
cout<<"ISD-VO";cin>>i;
cout<<"KOL_VO";cin>>k;
cout<<"CENA";cin>>c;
ob[s].set(a,n);
obb[s].set(y,i,k,c);
}
for (s=0;s<e;s++)
{
ob[s].print();
obb[s].print();
}
}


Автор: Павлуха 3.10.2006, 01:08
А как применяются конструкторы и деструкторы, если создавать просто объекты всё понятно, а как при работе с массивами объектов они применяются(для данного случая)........
P.S. Извините если я вас уже запарил!!! smile 

Автор: Rockie 3.10.2006, 09:53
Павлуха, а где остальной код?

в существующем полагаю должно быть что-то вроде этого:
Код
cout<<"Vvedite kol-vo knig";cin>>e;
for (s=0;s<e;s++)
{
cout<<"AVTOR";cin>>a;
cout<<"NAME";cin>>n;
cout<<"YEAR";cin>>y;
cout<<"ISD-VO";cin>>i;
cout<<"KOL_VO";cin>>k;
cout<<"CENA";cin>>c;
ob[s].set(a,n);
obb[s].set(y,i,k,c);
}


Автор: sergejzr 3.10.2006, 10:57
Модератор: Название темы должно отражать ее суть!

Автор: vinter 3.10.2006, 15:15
Цитата

А как применяются конструкторы и деструкторы, если создавать просто объекты всё понятно, а как при работе с массивами объектов они применяются

точно так же

Автор: sergejzr 15.11.2006, 15:32
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)