Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
1 / 1 / 2
Регистрация: 07.06.2016
Сообщений: 82

Реализовать класс "Книга"

06.09.2016, 13:41. Показов 7096. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть : Книга(жанр,автор,название,год издания,цена).
Нужно написать программу :
1.Все данные должны быть закрытыми.Доступ к полям класса должны обеспечить методы класса.
2.Класс должен содержать открытые методы-аксессоры:
-для инициализации полей Set
-для получения из полей Get
-для вывода на экран Show
3.для возврата значения из полей необходимо исп. ссылки.

Помогите доделать/переделать программу.Вот что смог ...
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
#include <iostream>
using namespace std;
 
class kniga {
public:
    char janr[20];
    char avtor[30];
    char nazvanie[40];
    int god_izdania;
    int cena;
 
void set()
{
    cout<<"Vvedite janr:";
    cin>>janr;
    cout<<"Vvedite avtora:";
    cin>>avtor;
    cout<<"Vvedite nazvanie:";
    cin>>nazvanie;
    cout<<"Vvedite god vipyska:";
    cin>>god_izdania;
    cout<<"Vvedite ceny:";
    cin>>cena;
}
void show()
{
    cout<<"Janr:"<<janr<<endl;
    cout<<"Avtor:"<<avtor<<endl;
    cout<<"Nazvanie:"<<nazvanie<<endl;
    cout<<"GOd vipyska:"<<god_izdania<<endl;
    cout<<"Cena:"<<cena<<endl;
}
 
 
};
 
 
int main()
{
    kniga n1;
 
    n1.set();
    n1.show();
 
 
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.09.2016, 13:41
Ответы с готовыми решениями:

Книга. Реализовать класс, добавить поля
Книга. Реализовать класс, добавить поля, в том числе с типом char* в приватную секцию, добавить геттеры и сеттеры для этих полей в...

Реализовать связь классов "телефонная книга" и родительский класс "телефонный номер"
Суть проблемы:есть дочерний класс &quot;телефонная книга&quot; и родительский класс &quot;телефонный номер&quot;. В классе &quot;телефонная книга&quot; к...

Класс КНИГА
Разработать класс – КНИГА. В закрытой части определить данные – автор, название, издательство, год издания. Определить конструкторы,...

25
1 / 1 / 2
Регистрация: 07.06.2016
Сообщений: 82
16.09.2016, 13:14  [ТС]
Студворк — интернет-сервис помощи студентам
Мне снова нужна ваша помощь.То же задание,только нужно добавить в код :
1.Взаимодействие объекта класса с файлами через дружественные функции
2.Придумать и разработать подставляемую функцию-член класса.
3.Для определения кол-ва сущ. объектов класса исп. статические члены класса.
4.(необязательно)
- хренение сведений в файле
-дозапись файла сведениями новых объектов
-чтение из файла
-определение кол-ва существующих объектов класса
(Скорей всего я уже надоел,но на всякий оставлю тут,может поможет кто.)
КОд:
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
#include <iostream>
using namespace std;
 
class kniga
{
private:
    
    char author[30];
    char name[30];
    int year;
    double price;       
public:
    kniga()
    {
        strcpy_s(author,"Ymolchanie");
        strcpy_s(name,"Ymolchanie2");
        year=0;
        price=0;
        cout<<"Srabotal Konstruktor"<<endl;
    }
 
    kniga(char _author[],char _name[],int _year,double _price)
    {
        strcpy_s(author,_author);
        strcpy_s(name,_name);
        year=_year;
        price=_price;
        cout<<"Srabotal Konstruktor s parametrami"<<endl;
    }
 
    void showkniga()
    {
        cout << "Avtor:" << author<<endl;
        cout << "Name:" << name<<endl;
        cout << "God_izdania:" <<year<<endl;
        cout << "Price=$" << price<<endl;
    }
    ~kniga()
    {
        cout<<"Srabotal Destryktor!";
    }
};
 
int main()
{
    kniga n1("Petrov Alexandr","Plan B", 1995, 23.5);
    n1.showkniga();
 
    kniga n2;
    n2.showkniga();
 
    system("pause");
    return 0;
}
Добавлено через 23 часа 39 минут
Вот что получилось ( Это - разработать подставляемую функцию-член класса.)
Не разобрался как сделать :
1.Взаимодействие объекта класса с файлами через дружественные функции
3.Для определения кол-ва сущ. объектов класса исп. статические члены класса.
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
#include <iostream>
#include <string>
using namespace std;
 
class kniga {
    string name;
    string avtor;
    int god_izdania;
    double cena;
public:
    
    void init (string a,string b,int i, double j);
    void show();
};
 
inline void kniga :: init (string a,string b,int i, double j) {name=a;avtor=b; god_izdania = i; cena = j; }
inline void kniga :: show()  { cout <<"Nazvanie:"<<name<<"\nAvtor: "<<avtor<<"\nGod izdania: "<< god_izdania << "\nCena: " << cena << "\n"; }
int main()
{   
    
    kniga x;
    x.init("Plan B","Alexandr Petrov",1996,20.5);
    x.show();
    
    system("pause");
    return 0;
}
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
16.09.2016, 14:14
Вот пример, думаю разберетесь
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
#include <iostream>
using namespace std;
 
class Book{
public:
    static int count;//количество экземпляров
    
    Book(){ 
        Book::count++; //создали новый
    }
    
    ~Book(){ 
        Book::count--; // уничтожили
    }
    
    friend void readFile(Book &b, char* filename){
        //Читаем данные из файла
        //дружественные методы имеют доступ ко всем полям класса
        //дружба не наследуется
    }
};
 
int Book::count = 0;// статические переменные нужно определять
 
void foo(){
    Book b[100];//создали 100
    std::cout << Book::count << std::endl;
    //при выходе из функции сработает деструктор и удалит
    //всё созданное в функции
}
 
int main() {
    Book b[5];
    //у нас 5 экземпляров
    std::cout << Book::count << std::endl;
    foo();
    std::cout << Book::count << std::endl;
    return 0;
}
1
1 / 1 / 2
Регистрация: 07.06.2016
Сообщений: 82
17.09.2016, 08:09  [ТС]
Спасибо,постараюсь.Если будут вопросы,то отпишу

Добавлено через 15 часов 49 минут
Вот что получилось,в конце при счете экземпляров показывает:
4
104
4
Так и должно быть? И в {} Friend функции что-то нужно написать? ( Если что нужно 4 экземпляра,вместо 5)
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
#include <iostream>
#include <string>
using namespace std;
 
class kniga {
    string name;
    string avtor;
    int god_izdania;
    double cena;
public:
    static int count; 
    kniga() { count++;}
    ~kniga() {count--;}
    friend void readfile(kniga &k, char* filename) {};
    void init (string a,string b,int i, double j);
    void show();
};
 
 
inline void kniga :: init (string a,string b,int i, double j) {name=a;avtor=b; god_izdania = i; cena = j; }
inline void kniga :: show()  { cout <<"Nazvanie:"<<name<<"\nAvtor: "<<avtor<<"\nGod izdania: "<< god_izdania << "\nCena: " << cena << "\n"; }
int kniga::count=0;
void f()
{ 
    kniga k[100];
    cout<<kniga::count<<endl;
}
 
int main()
{   
    kniga k[4]; 
    cout<< kniga::count<<endl;
    f();
    cout<<kniga::count<<endl;
 
    
    kniga x;
    x.init("Plan B","Alexandr Petrov",1996,20.5);
    x.show();
    
    system("pause");
    return 0;
}
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
18.09.2016, 03:53
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

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
#include <iostream>
#include <fstream>
#include <string>
 
class Book{
public:
     static int count; 
     Book();
     Book(const std::string& , const std::string& , const int&, const float&);
     ~Book();
       
     friend std::ostream& operator << (std::ostream&, const Book&);//вместо метода show(), это вывод в поток
     friend bool readFile(const std::string&, Book&);
    
    inline std::string getAuthor()const;
    inline std::string getName()const;
    inline int getYear()const;
    inline float getPrice()const;   
    
    void setAuthor(const std::string&);
    void setName(const std::string&);
    void setYear(const int&);
    void setPrice(const float&);
 
private:
    std::string author;
    std::string name;
    int year;
    float price;
};
 
Book::Book():author(""), name(""), year(0), price(0.0){
    Book::count++;
}
 
Book::Book(
        const std::string& _author,
        const std::string& _name, 
        const int& _year, 
        const float& _price
    )
    : author(_author), name(_name), year(_year), price(_price){
            Book::count++;
           }
 
Book::~Book(){ 
    Book::count--;
}
 
std::ostream& operator << (std::ostream& out, const Book& b){
    out << b.author << " - " << b.name << " (" << b.year << ") $" << b.price;
    return out;
}
 
 bool readFile(const std::string& filename, Book &b){// не проверял тк на компе нет компилятора
     std::ifstream in(filename);
     if(!in.is_open()) return false;
        
    std::string s;
    getline(in, s);
    if(s == "") return false;
    int i = s.find(" - ");
    b.author = s.substr(0, i);
    
    i += 3;
    int j = s.find("(");
    b.name = s.substr(i, j - i - 1);
    
    b.year = stoi(s.substr(j + 1, 4));
    b.price = stof(s.substr(s.find("$") + 1));
    return true;
 }
 
 
std::string Book::getAuthor() const{ return author; }
std::string Book::getName() const{ return name; }
int Book::getYear() const { return year; }
float Book::getPrice() const{ return price; }   
 
void Book::setAuthor(const std::string &a) { author = a; }
void Book::setName(const std::string &n) { name = n; }
void Book::setYear(const int& y) { year = y; }
void Book::setPrice(const float& p) { price = p; }
 
int Book::count = 0;
 
 
int main()
{   
 
    std::cout << "Book count = " << Book::count << std::endl;
    Book *b1 = new Book[10];
    std::cout << "Book count = " << Book::count << std::endl;
    Book *b2 = new Book[10];
    std::cout << "Book count = " << Book::count << std::endl;
    delete []b1;
    std::cout << "Book count = " << Book::count << std::endl;
    delete []b2;
    std::cout << "Book count = " << Book::count << std::endl;
 
    Book b("A. S. Pushkin", "Eugene Onegin", 1825, 125.5);
    std::cout << "Book count = " << Book::count << std::endl 
                << b << std::endl;
 
    b.setPrice(1);
    std::cout << b << std::endl;
    
    std::cout << b.getAuthor() << " - " << b.getName() << " (" << b.getYear() << ") $"<< b.getPrice() << std::endl;
 
    return 0;
}
0
1 / 1 / 2
Регистрация: 07.06.2016
Сообщений: 82
18.09.2016, 08:24  [ТС]
Блин для меня слишком сложно и не понятно написан код)
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
18.09.2016, 08:52
Порядок ваших действий:
1. Пытаетесь разобраться.
2. Есть вопросы, выделяете кусок кода и спрашиваете, что именно не понятно.
3. Получили ответ, разумется поняли, но не всё, подумали, попробовали написать свое.
переходим к пункту 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2016, 08:52

Класс Книга
Привет.Помогите пожалуйста спроектировать класс &quot;Книга&quot; и реализовать основные методы по работе с книгой.Заранее спасибо.

Класс книга
Здравствуйте, объясните пожалуйста почему возникают некоторые ошибки при компиляции header.h /*Создать класс КНИГА с атрибутами:...

Класс Телефонная Книга
Доброго времени суток форумчане! Получил следующее задание, но столкнулся с проблемой.. 1) опишите класс &quot;контакт&quot;,...

создать класс- книга
Помогите создать класс книга : автор , название , издательство , год, количество страниц ))Очень нужно

Помогите написать класс Книга
Помогите решить задачку ( написать класс ) Класс Книги: название автор цена количество найти: среднюю цену,...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru