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

Ошибка в учебнике или я чего то не понимаю

28.06.2016, 21:25. Показов 1419. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В учебнике Дейтела Харви при изучении полиморфизма натолкнулся на такую вещь, создается абстрактный класс, его наследники, а потом в майн создаются объекты его наследников, но компилятор ругается, что мол нельзя создавать объекты абстрактных классов - вот код.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef EMPLOYEE_H_
#define EMPLOYEE_H_
 
class Employee{
public:
    Employee(const char*,const char*);
    virtual ~Employee();
    const char* getFirstName()const;
    const char* getLastName()const;
    virtual double earnings()const=0;//чистая виртуальная функция
    virtual void print()const;//виртуальная функция
private:
    char* firstName;
    char* lastName;
};
#endif /* EMPLOYEE_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
#include "Employee.h"
#include <cstring>
#include <cassert>
#include <iostream>
using std::cout;
 
Employee::Employee(const char* first,const char* last){
    firstName=new char[strlen(first)+1];
    assert(firstName!=0);
    strcpy(firstName,first);
 
    lastName=new char[strlen(last)+1];
    assert(lastName!=0);
    strcpy(lastName,last);
}
Employee::~Employee(){
    delete [] firstName;
    delete [] lastName;
}
const char* Employee::getFirstName()const{
    return firstName;
}
const char* Employee::getLastName()const{
    return lastName;
}
void Employee::print()const{
    cout<<firstName<<" "<<lastName;
}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef BOSS_H_
#define BOSS_H_
#include "Employee.h"
class Boss:Employee{
public:
    Boss(const char*, const char*, double);
    virtual ~Boss();
    void SetWeeklySalary(double);
    virtual double earanings()const;
    virtual void print()const;
private:
    double weeklySalary;
};
#endif /* BOSS_H_ */
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Boss.h"
#include <iostream>
using std::cout;
Boss::Boss(const char* first,const char* last, double s):Employee(first,last){
    SetWeeklySalary(s);
}
Boss::~Boss(){}
void Boss::SetWeeklySalary(double s){
    weeklySalary=(s>0?s:0);
}
double Boss::earanings()const{
    return weeklySalary;
}
void Boss::print()const{
    cout<<"Администратор:  ";
    Employee::print();
}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef COMMISSIONWORKER_H_
#define COMMISSIONWORKER_H_
#include "Employee.h"
class CommissionWorker:Employee{
public:
    CommissionWorker(const char*, const char*, double=0.0,double=0.0,int=0);
    virtual ~CommissionWorker();
    void setSalary(double);
    void setCommission(double);
    void setQuantity(int);
    virtual double earnings()const;
    virtual void print()const;
private:
    double salary;//базовая зп за неделю
    double commission;//комиссионная зп
    int quantity;//количество проданных деталей
};
#endif /* COMMISSIONWORKER_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
#include <iostream>
#include "CommissionWorker.h"
using std::cout;
 
CommissionWorker::CommissionWorker(const char* first, const char* last,double s,double c,int q)
:Employee(first,last){
    setSalary(s);
    setCommission(c);
    setQuantity(q);
}
CommissionWorker::~CommissionWorker(){}
void CommissionWorker::setSalary(double s){
    salary=s>0?s:0;
}
void CommissionWorker::setCommission(double c){
    commission=c>0?c:0;
}
void CommissionWorker::setQuantity(int q){
    quantity=q>0?q:0;
}
double CommissionWorker::earnings()const{
    return (salary+commission*quantity);
}
void CommissionWorker::print()const{
    cout<<"Работник на коммиссионных";
    Employee::print();
}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include "Employee.h"
#include "Boss.h"
#include "CommissionWorker.h"
using namespace std;
 
int main() {
    Boss b("Макс","Казаков", 10000.99);
    b.print();
    cout << "Заработал " <<b.earanings()<< endl; // prints !!!Hello World!!!
    return 0;
}


Вот что пишет компилятор
20:04:08 **** Incremental Build of configuration Debug for project TestNasledovanie ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\TestNasledovanie.o" "..\\src\\TestNasledovanie.cpp"
..\src\TestNasledovanie.cpp: In function 'int main()':
..\src\TestNasledovanie.cpp:16:7: error: cannot declare variable 'b' to be of abstract type 'Boss'
Boss b("Макс","Казаков", 10000.99);
^
In file included from ..\src\TestNasledovanie.cpp:11:0:
..\src\Boss.h:11:7: note: because the following virtual functions are pure within 'Boss':
class Boss:Employee{
^
In file included from ..\src\TestNasledovanie.cpp:10:0:
..\src\Employee.h:17:17: note: virtual double Employee::earnings() const
virtual double earnings()const=0;//чистая виртуальная функция
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2016, 21:25
Ответы с готовыми решениями:

нужно выяснить ИЛИ Я идиот ИЛИ в учебнике ошибка (простая задача статики)
условие : Ha твердое тело в точке А действуют силы FI = 6 Н и F2 = 3 Н, линии действия которых находятся в плоскости Оху. Определить...

Ошибка в учебнике или я неправильно понял?
Учу с++ по самоучителю. Анализируя очередной код наткнулся на фразу (на фото). Ошибка ли это или я не правильно понял? Переменная n...

Легко.Я не догоняю или ошибка в учебнике
Без понятие как это поискать тут...не серчайте. Тема такая... Повторяю курс физики, ибо ничего не помню вообще... Застопорился на не...

4
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
28.06.2016, 21:30
class Boss:Employee
public не забыли? С другим классом тоже.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
28.06.2016, 21:30
Лучший ответ Сообщение было отмечено Maximum_001 как решение

Решение

Цитата Сообщение от Maximum_001 Посмотреть сообщение
double earanings()const
Цитата Сообщение от Maximum_001 Посмотреть сообщение
double earnings()const;
Найди отличие.
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
28.06.2016, 21:32
И имена функций проверьте. Они у Вас разные в базом классе и в наследниках.
0
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 96
29.06.2016, 09:38  [ТС]
Уже проверил, спасибо большое, все заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2016, 09:38
Помогаю со студенческими работами здесь

Ошибка в учебнике или ощущение недосказанности.
Добрый вечер! Уважаемые программисты, встретилась с интересной ошибкой(скорее всего у меня). Недавно работала с практикумом М.Г....

Баг компилятора или я чего-то не понимаю?
Столкнулся с некоректной работой мк ATmego328P, хотя в C-шном коде ошибок не видно. В таких случаях обычно смотрю дизассемблированный код...

Бага в пхп или я чего-то не понимаю?..
Почему такой код не увеличивает $i? $i = 0; $str = &quot;This is a test string #{$i}&quot;; ++$i; echo $str; Выводит - This is a test...

Keil 4.22.22 глюк или я чего не понимаю?
Отлаживаю CAN шину на 2x STM32F4Dyscovery. Использую Keil версия 4.22.22. Получаю прерывания от шины. void CAN1_RX0_IRQHomdler(void) ...

Проблема в SSD (или я чего то не понимаю)
на компе стоит старый веник ему лет 15, хочу теперь что бы винда стояла на SSD и старый остался в работе. Купил новый SSD . Такая...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru