Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 9

Класс книга

08.12.2019, 16:11. Показов 635. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, объясните пожалуйста почему возникают некоторые ошибки при компиляции
header.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
/*Создать класс КНИГА с атрибутами: название, автор, кол-во страниц. Реализовать
методы: посмотреть всю информацию об объекте, вернуть автора книги. Создать
производный класс ДЕТСКАЯ КНИГА со своими атрибутами: издательство, стоимость;
и методами: изменить стоимость, посмотреть свойства объекта (заместить
соответствующий метод). Для класса ДЕТСКАЯ КНИГА реализовать внешний метод (не
являющийся методом данного класса), который запрашивает у пользователя и
устанавливает значение для цены объекта (класса ДЕТСКАЯ КНИГА), ссылка на
который передается данному методу в качестве параметра.*/
class book{//абстрактный родительский класс
protected:
    char* bname;//название книги
    char* author;//автор
    int pages;//количество страниц
public:
    book(char* ="Kniga",char* ="Author",int=120);//конструктор
    book(const book&);//конструктор копирования
    book& operator=(const book&);//оператор присваивания
    void printauthor()const;//печать автора
    void printpages()const;//печать страниц
    virtual void print()const=0;//печать всей информации, виртуальный метод
    virtual void set()=0;
    virtual ~book();//виртуальный деструктор
};
class childbook:public book{//класс-наследник
private:
    char* izdat;//издательство
    int price; //цена
public:
    childbook(char* ="Detskaya Kniga",char* ="Author detskoy knigi",int=90,char* ="Izdatelstvo", int =1000);//конструктор
    childbook(const childbook&);//конструктор копирования
    childbook& operator=(const childbook&);//оператор присваивания
    void printizdat()const;//печать издательства
    virtual void print()const;//замещение виртуального метода вывода
    void printcount()const;//печать количества объектов класса
    virtual void set();
    virtual ~childbook();//деструктор
};

header.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
#include "header.h"
#include <iostream>
#include <string>
 
//реализация методов родительского класса
book::book(char* a, int b, char* c):pages(b){//конструктор
    bname=new char[strlen(a)+1];
    strcpy(bname,a);
    author=new char[strlen(c)+1];
    strcpy(author,c);
}
book::book(const book &A):pages(A.pages){//конструктор копирования
    bname=new char[strlen(A.bname)+1];
    strcpy(bname,A.bname);
    author=new char[strlen(A.author)+1];
    strcpy(author,A.author);
}
book& book::operator=(const book &A){//оператор присваивания
    if(this!=&A){
            pages=A.pages;
        if(strlen(bname)!=strlen(A.bname)){
            delete[]bname;
            bname=new char[strlen(A.bname)+1];
        }
        strcpy(bname,A.bname);
        if(strlen(author)!=strlen(A.author)){
            delete[]author;
            author=new char[strlen(A.author)+1];
        }
        strcpy(author,A.author);
    }
    return *this;
}
void book::printauthor()const{//печать автора
    std::cout<<"\nauthor:"<<author;
}
void book::print()const{//виртуальный метод вывода всей информации
    std::cout<<"\nbook name: "<<bname<<"\npages: "<<pages<<"\nauthor: "<<author;
}
void book::set(){
    char n[30];
    std::cout<<"\nEnter information:\n"<<"book name: ";
    std::cin.ignore();
    std::cin.clear();
    std::cin.getline(n,30);
    if((strlen(bname))!=(strlen(n))){
        delete[] bname;
        bname=new char [strlen(n)+1];
    }
    strcpy(bname,n);
    std::cout<<"\npages: ";
    std::cin>>pages;
    std::cout<<"\nauthor: ";
    std::cin>>author;
}
 
book::~book(){//виртуальный деструктор
    delete[](bname,author);
}
childbook::childbook(const childbook &A):book(A){//конструктор копирования
    izdat=new char[strlen(A.izdat)+1];
    strcpy(izdat,A.izdat);
    /*count++;*/
}
childbook& childbook::operator=(const childbook &A){//оператор присваивания
    if(this!=&A){
        book::operator=(A);
        if(strlen(izdat)!=strlen(A.izdat)){
            delete[]izdat;
            izdat=new char[strlen(A.izdat)+1];
        }
        strcpy(izdat,A.izdat);
    }
    return *this;
}
void childbook::print()const{//замещение виртуального метода вывода всей информации
    std::cout<<"\nChild book";
    book::print();
    std::cout<<"\nIzdat Name: "<<izdat;
}
void childbook::set(){
    book::set();
    std::cout<<"\nIzdat name: ";
    char d[30];
    std::cin.ignore();
    std::cin.clear();
    std::cin.getline(d,30);
    if((strlen(izdat))!=(strlen(d))){
        delete[] izdat;
        izdat=new char [strlen(d)+1];
    }
    strcpy(izdat,d);
}
childbook::~childbook(){//деструктор
    delete[]izdat;
}

main.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
#include "header.h"
#include <iostream>
 
int main(){
    int type,key;
    book *p=0;
    do{
        std::cout<<"\nEnter command:\n0-hud book, 1-doc book, 2-exit\n";
        std::cin>>key;
        switch(key){
            case 0:p=new book("Kniga", "Author", 128);break;
            case 1:p=new childbook("In the Sun", "Documental", 106, "Izdat", 1000);break;
            case 2:delete p;std::cout<<std::endl;system("pause");return 0;
        }
 
        std::cout<<"\nEnter command:\n0-print, 1-enter new\n";
        std::cin>>type;
        switch(type){
            case 0:p->print();break;
            case 1:p->set();p->print();break;
        }
    }while(key!=2);
}

Ошибки
1>f:\kniga\kniga\header.cpp(6) : error C2511: book::book(char *,int,char *): перегруженная функция-член не найдена в 'book'
1>f:\kniga\kniga\header.cpp(97) : fatal error C1004: непредвиденное обнаружение конца файла
1>f:\kniga\kniga\main.cpp(11) : error C2259: book: невозможно создать экземпляр абстрактного класса
1> f:\kniga\kniga\header.h(20): см. объявление 'book::рrint'
1> f:\kniga\kniga\header.h(21): см. объявление 'book::set'
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2019, 16:11
Ответы с готовыми решениями:

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

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

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

3
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
08.12.2019, 19:17
book(char *,char *, int); описал так
C++
1
book(char *,int , char *) // а в ревлизации так  трудно это понять??
0
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 9
08.12.2019, 19:28  [ТС]
Цитата Сообщение от marat_miaki Посмотреть сообщение
book(char *,char *, int); описал так
Я менял это в реализации, но ошибки не меняются, в этом и проблема
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
08.12.2019, 21:39
нет реализации childbook("In the Sun", "Documental", 106, "Izdat", 1000)
уберите для начала вертуальные функции, как разберетесь реализуйте
strlen() находится в <string.h>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2019, 21:39
Помогаю со студенческими работами здесь

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

что делать дальше? Класс Книга.
Помогите разобраться с тем, что делать дальше... Создать класс КНИГА с атрибутами: название, автор, кол-во страниц. Реализовать методы:...

Класс книга. Работа с произвольным количеством книг
Помогите доделать:help: Создать класс Книга.Информация о книге: название, автор, год издания. Предусмотреть возможность работы с...

Создать класс КНИГА с такими полями в защищенной части: значення_УДК, автор, название, издательство, год издания.
Здраствуйте) Нужна помощь, а то незнаю как сделать даное задание! Создать класс КНИГА с такими полями в защищенной части: значення_УДК,...

Книга Стива Макконнелла "Совершенный код. Мастер-класс"
Совершенный код. Мастер-класс Автор: Стив Макконнелл Есть те читал сию книгу с форума?Стоит ли брать? Читал положительные отзывы но...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru