Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   производный класс (http://forum.oszone.net/showthread.php?t=129307)

Sky-er 21-01-2009 04:31 1014438

производный класс
 
Здравствуйте помогите разобраться имеется класс книга:
читать дальше »
Код:

#include "stdafx.h"
#include <iostream>
using namespace std;
                 
class Book{
        char *author;
        char *name;
        char *janr;
        int year;
public:
        Book(char *au, char *nb, char *jr, int yr);

        void set_author(char *au){author=au;} // Установка имени автора книги
        void set_name(char *nb){name=nb;}  // Установка названия книги
        void set_janr(char *jr){janr=jr;}  // Установка жанра книги
        void set_year(int yr){year=yr;}  // Установка года выпуска книги

// Функции "get", возвращение значений полей книги
  char *get_author() {return author;}
  char *get_name()  {return name;} 
  char *get_janre()  {return janr;}
  int  get_year()  {return year;}

  void printBook();  // Печать значений книги
  void CalculateYearBook(); //Вычисление возраста книги
};

Book::Book(char *au, char *nb, char *jr, int yr)
// Выделение памяти
{
  author = new char[strlen(au) + 1]; 
    strcpy(author, au);
 name = new char[strlen(nb) + 1];
    strcpy(name, nb);
        janr = new char[strlen(jr) + 1]; 
    strcpy(janr, jr);
        year=yr;
}


void Book::CalculateYearBook()
{
  int MyYear = 2008, 
      resultYear; 

  resultYear = MyYear - year;
 cout<<"\n This Book "<<resultYear<<" Years! \n"<<endl;
}
// Печать объекта-------------------------------------------------------------
void Book::printBook()
{
  cout<<" Author Book: "<<author<<endl;
  cout<<" Name Book: "<<name<<endl;
  cout<<" Janre Book: "<<janr<<endl;
  cout<<" Year Book: "<<year<<endl;
 
}
void main()
{
  Book b("Servantes", "Don Kixot", "Romantic", 1950);
  b.printBook();
  b.CalculateYearBook();
  b.set_author("Pushkin");
  b.set_name("Lukomorie");
  b.set_janr("skazki");
  b.set_year(1968);
  b.printBook();
  b.CalculateYearBook();
}



Создать производный класс типа – учетная карточка наименования в библиотеке. Доопределить в нем поля: шифр, количество экземпляров, количество выдач наименования по запросу; методы: установки полей и получения значений полей, определения коэффициента востребованности наименования (относительно общего количества экземпляров наименования). Переопределить метод печати.

Я думаю, что должно выглядеть вот так
читать дальше »
Код:

#include "stdafx.h"
#include <iostream>
using namespace std;
                 
class Book{
protected:
        char *author;
        char *name;
        char *janr;
        int year;
public:
        Book(char *au, char *nb, char *jr, int yr);

        void set_author(char *au){author=au;}
        void set_name(char *nb){name=nb;}
        void set_janr(char *jr){janr=jr;}
        void set_year(int yr){year=yr;}

  char *get_author() {return author;}
  char *get_name()  {return name;} 
  char *get_janre()  {return janr;}
  int  get_year()  {return year;}

  void printBook(); 
  void CalculateYearBook();
};

Book::Book(char *au, char *nb, char *jr, int yr)
{
  author = new char[strlen(au) + 1]; 
    strcpy(author, au);
 name = new char[strlen(nb) + 1];
    strcpy(name, nb);
        janr = new char[strlen(jr) + 1]; 
    strcpy(janr, jr);
        year=yr;
}


void Book::CalculateYearBook()
{
  int MyYear = 2008, 
      resultYear; 

  resultYear = MyYear - year;
 cout<<"\n This Book "<<resultYear<<" Years! \n"<<endl;
}

void Book::printBook()
{
  cout<<" Author Book: "<<author<<endl;
  cout<<" Name Book: "<<name<<endl;
  cout<<" Janre Book: "<<janr<<endl;
  cout<<" Year Book: "<<year<<endl;
}

class library_card:public Book
{
int shifr;
int exeplyars;
int vydachi;
public:
library_card(int sh, int kol_ex, int kol_vyd);

 void set_shifr(int sh){shifr=sh;}
 void set_exeplyars(int kol_ex){exeplyars=kol_ex;}
 void set_vydachi(int kol_vyd){vydachi=kol_vyd;}

 int  get_shifr()  {return shifr;} 
 int  get_exeplyars()  {return exeplyars;}
 int  get_vydachi()  {return vydachi;}

void printlibrary_card();
void vostrebovannost();
};
library_card::library_card(char *au, char *nb, char *jr, int yr, int sh , int kol_ex, int kol_vyd):
Book(author, name, janr, year)// сдесь ругается  ??
{
shifr=sh;
exeplyars=kol_ex;
vydachi=kol_vyd;
}

void library_card::vostrebovannost()
{
}
void library_card::printlibrary_card()
{
printBook();
cout<<" shifr: "<<shifr<<endl;
cout<<" exeplyars: "<<exeplyars<<endl;
cout<<" vydachi: "<<vydachi<<endl;
}

void main()
{
  Book b("Servantes", "Don Kixot", "Romantic", 1950);
  b.printBook();
  b.CalculateYearBook();
  b.set_author("Pushkin");
  b.set_name("Lukomorie");
  b.set_janr("Skazki");
  b.set_year(1968);
  b.printBook();
  b.CalculateYearBook();       
card.printlibrary_card();
}



И дальше то, что я совсем непонимаю как сделать
Написать программу «Электронный каталог библиотеки», создающую картотеку библиотеки, позволяющую делать запрос на определенную книгу, выводить на экран список востребованных наименований с указанием коэффициента, изменять данные наименования (по частям и полностью), искать книгу по заданному параметру (шифр, название, автор, вид литературы) и печатать на экран содержимое каталога.

Busla 21-01-2009 11:49 1014606

Так в чём же дело? - Чисто механическая работа, которая делается после прочтения одной-двух коротких глав учебника специально глянул объём необходимого материала у Страуструпа.

А не смущает, что конструктор и методы присвоения для полей реализованы совсем неодинаково? ;-)

Drongo 25-01-2009 13:32 1018745

Цитата:

Цитата Busla
А не смущает, что конструктор и методы присвоения для полей реализованы совсем неодинаково? ;-) »

А если так?
Код:

...
// Реализация
Book::Book(char *au, char *nb, char *jr, int yr)
{
  set_author(au);
  set_name(nb);
  //Дальше, остальные функции
  //...
}
// Реализация функций присваивания
// Функция присваивания автора
void Book::set_author(char *au)
{
  author = au;

// Функция присваивания имени
void Book::set_name(char *nb)
{
  name = nb;
}
//...


Busla 25-01-2009 14:54 1018835

Sky-er, не надо редактировать свои сообщения без лишней необходимости.

Цитата:

Цитата Sky-er
И дальше то, что я совсем непонимаю как сделать »

Это потому, что задание с производным классом мало относится к созданию программы учёта. Например, сущность "книга" там вообще не нужна, по крайней мере в такой реализации.

Drongo, в первоначальной реализации конструктор создавал новые строки в объекте. В твоём варианте конструктор хранит адрес какой-то внешней строки, вот что получается:
Код:

:цикл
  вывод:  введите название новой книги
  ввод: name
  новый объект со ссылкой на name
повторяем?

в итоге все объекты будут ссылаться на переменную name, где находится название последней книги

Sky-er 26-01-2009 00:08 1019400

Цитата:

Цитата Busla
Это потому, что задание с производным классом мало относится к созданию программы учёта. Например, сущность "книга" там вообще не нужна, по крайней мере в такой реализации. »

Это просто первое задание было создать класс книга, потом сделать производный класс от него ну а дальше как написанно каталог библиотеки просто они связанны наверно должны быть я так думаю, а не менять полностью весь код для написания каталога библиотеки


Время: 23:44.

Время: 23:44.
© OSzone.net 2001-