Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Наследование. Иерархия классов


Автор: oshilan 20.4.2010, 13:53
Задача: Программа считывает данные с файла (во вложении), заносит их в односвязный список, сразу же выводит таблицу с данными на экран.
Проблема: Таблица пуста.
Класс OutDB - наследник класса InDB. У обоих классов все методы и поля - public. В чём проблема - не пойму. Если засунуть всё в один класс - всё работает.
Код
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<iomanip.h>
FILE *f;

class InDB
{ public:
    char name[5];
    char brand[10];
    int count;
    InDB *top;
    InDB *next;
    void ReadF();
} indb;

class OutDB : InDB
{ public:
    void WriteC();
} outdb;

void InDB::ReadF()
{ InDB *db=top;
  f=fopen("in.txt","r");
  fscanf(f,"%s\n",db->name);
  fscanf(f,"%s\n",db->brand);
  fscanf(f,"%u\n\n",db->count);
  db->next=NULL;
  while(!feof(f))
  { db->next=new InDB;
    db=db->next;
    fscanf(f,"%s\n",db->name);
    fscanf(f,"%s\n",db->brand);
    fscanf(f,"%u\n\n",&(db->count));
    db->next=NULL;
  }
  fclose(f);
};

void OutDB::WriteC()
{ InDB *db=top;
  cout<<"############################\n";
  cout<<"# Name #   Brand   # Count #\n";
  cout<<"############################\n";
  while(db)
  { cout<<"#"<<setw(5)<<db->name<<" #"<<setw(10)<<db->brand<<" #"<<setw(6)<<db->count<<" #"<<endl;
    db=db->next;
  }
  cout<<"############################\n\n";
};

void main()
{ clrscr();
  indb.ReadF();
  outdb.WriteC();
  getch();
}

Автор: bsa 20.4.2010, 14:11
oshilan, у тебя indb и outdb - разные сущности. Т.е. indb загружает и хранит данные, а таблицу ты составляешь из пустого outdb. В твоем случае нужно делать так:
Код
void main()
{
  clrscr();
  OutDB outdb;
  outdb.ReadF();
  outdb.WriteC();
  getch();
}
Соответственно, глобальные определения объектов indb и outdb не нужны.

Автор: oshilan 20.4.2010, 21:48
2 bsa: Спасибо! Всё работает так. +1 символически (постов мало)

Автор: xvr 21.4.2010, 11:40
Цитата(oshilan @  20.4.2010,  21:48 Найти цитируемый пост)
+1 символически
Сделал фактически  smile 

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