Форум программистов, компьютерный форум CyberForum.ru

Ошибка в векторе ссылок на базовый класс - C++

Восстановить пароль Регистрация
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
08.10.2013, 12:54     Ошибка в векторе ссылок на базовый класс #1
Пишу задачку по полиморфизму, задача: создать иерархию служащих , где каждый служащий получает разную зарплату.

Вот собственно классы
Абстрактный класс
Кликните здесь для просмотра всего текста
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
#ifndef EMPLOYE_H
#define EMPLOYE_H
#include "string"
#include "TimeandDate.h"
using std::string;
 
 
class Employe 
{
public:
 Employe(const string &,const string &,const string &,const int);
 void SetName(const string&);
 string GetName()const;
 
 void SetLastName(const string &);
 string GetLastName()const;
 
 void SetSSN (const string &);
 int GetSSNError(const string&);
 string GetSSN()const;
 
 void SetMouth(const int);
 int GetMouth()const;
 int GetMouthReal() const;
 
 virtual double earnings() const =0;
 virtual void print()const;
private:
    Date date;
    string name;
    string lastname;
    string ssn;
    int mouth;
};
#endif EMPLOYE_H


HourlyEmploye.h

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef HOURLYEMPLOYE_H
#define HOURLYEMPLOYE_H
#include "Employe.h"
#include "string"
using std::string;
 
class HourlyEmploye:Employe
{
public:
    HourlyEmploye(const string &, const string &, const string &, const int, const double, const double);
    void SetTime(const double);
    double GetTime()const;
    void SetSales(const double);
    double GetSales()const;
    virtual double earnings() const;
    virtual void print()const;
private:
    double time;
    double sales;
};
#endif HOURLYEMPLOYE_H


Employe.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
97
98
99
100
101
#include "string"
#include "Employe.h"
#include "TimeandDate.h"
#include "iostream"
#include "iomanip"
#include <cctype>
using std::string;
using std::cout;
using std::cin;
using std::fixed;
using std::setprecision;
using std::endl;
 
 
 
Employe::Employe(const string &Name,const string &LastName,const string &SSN,const int Mouth)
    
{
    setlocale(LC_ALL,"");
    SetName(Name);
    SetLastName(LastName);
    SetSSN(SSN);
    SetMouth(Mouth);
}
void Employe::SetName(const string &Name)
{
    name=Name;
        while(name.size()>25)
        {
            cout<<"Имя слишком большое, введите заново";
            cin>>name;
        }
}
string Employe::GetName()const {return name;}
 
void Employe::SetLastName(const string& LastName)
{
    lastname=LastName;
        while(lastname.size()>25)
        {
            cout<<"Фамилия слишком большое, введите заново";
            cin>>lastname;
        }
}
string Employe::GetLastName() const {return lastname;}
 
void Employe::SetSSN(const string &SSN)
{
    ssn=SSN;
    bool count = true;
while(count)
{
    while (ssn.size()>9)
    {
        cout<<"Страховка больше 9 символов, введите заного";
        cin>>ssn;
    }
 
    if(GetSSNError(ssn)==0)
        count = false;
    else 
    {
        cout<<"Строка содержит Буквы\n";
        cin>>ssn;
    }
 
}
 
}
int Employe::GetSSNError(const string & SSN)
{
    for(int x=0;SSN[x]!='\0';x++)
    {
        if(isdigit(SSN[x])==0)
            return 1;
    }
    return 0;
}
 
string Employe::GetSSN()const {return ssn;}
 
void Employe::SetMouth(const int Mouth)
{
    mouth=Mouth;
    while(mouth<=0 || mouth > 12)
        {
            cout<<"Неправельный месяц,вводим заново";
            cin>>mouth;
        }
 
}
int Employe::GetMouth()const{return mouth;}
int Employe::GetMouthReal() const{return date.Getmouth(); }
 
void Employe::print() const 
{
    cout<<"Name: "<<GetName()<<endl;
    cout<<"LastName: "<<GetLastName()<<endl;
    cout<<"SSN: "<<GetSSN()<<endl;
    cout<<"Mouth: "<<GetMouth()<<endl;
}


HourlyEmploye.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
#include "HourlyEmploye.h"
#include "iostream"
#include "iomanip"
#include "string"
using std::string;
using std::setprecision;
using std::fixed;
using std::cout;
using std::cin;
using std::endl;
 
HourlyEmploye::HourlyEmploye(const string &Name,const string &LastName,const string &SSN,const int Mouth,const double Sales,double Time)
    :Employe(Name,LastName,SSN,Mouth)
{
    SetSales(Sales);
    SetTime(Time);
}
 
void HourlyEmploye::SetSales(const double Sales)
{
    sales=Sales;
    while(sales<0.0)
    {
        cout<<"Зарплата неверна,введите занова";
        cin>>sales;
    }
}
double HourlyEmploye::GetSales()const{return sales;}
 
void HourlyEmploye::SetTime(const double Time)
{
    time=Time;
    while(time<0.0 || time>168)
    {
        cout<<"Время неправильное,введите занова";
        cin>>time;
    }
}
double HourlyEmploye::GetTime()const {return time;}
 
double HourlyEmploye::earnings()const
{
    if(GetTime()>40)
    {
        if(Employe::GetMouth()==Employe::GetMouthReal())
            return GetSales()+(GetTime()-40)*1.5+100.00;
        else
            return GetSales()+(GetTime()-40)*1.5;
    }
    else 
    {
        if(Employe::GetMouth()==Employe::GetMouthReal())
            return GetSales()+100.00;
        else
            return GetSales();
    }
}
void HourlyEmploye::print() const
{
    cout<<fixed<<setprecision(2);
    Employe::print();
    cout<<"Sales: "<<earnings()<<endl;
}


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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//#include "BasePlusCommissionEmployee.h"
//#include "CommissionEmployee.h"
#include "Employe.h"
#include "HourlyEmploye.h"
#include "SalariedEmploye.h"
#include "iostream"
#include "iomanip"
#include <vector>
#include "string"
using std::string;
using std::cout;
using std::vector;
using std::cin;
using std::fixed;
using std::setprecision;
void VirtualPointer(const Employe &);
void VirtualReferen(const Employe *const);
 
void main()
{
    cout<<fixed<<setprecision(2);
    //SalariedEmploye salariedEmploye ("Djon","Smit","123456789",8,25000);
    HourlyEmploye hourlyEmploye ("Andre","Tomass","12k456789",10,15000,168);
    //CommissionEmployee commissionEmployee ("Djonatan","Arm","987654321",10,10000,0.6);
    //BasePlusCommissionEmployee basePlusCommissionEmployee("Sasha","Ololosh","147852369",1,16000,0.2);
    
    vector <Employe *> employe(2);
 
    //employe[0]=& salariedEmploye;
    employe[1]=& hourlyEmploye;
    
 
    hourlyEmploye.print();
    //salariedEmploye.print();
    
    //commissionEmployee.print();
    //basePlusCommissionEmployee.print();
 
 
 
 
    system("pause");
}



Ошибка
Кликните здесь для просмотра всего текста
error C2243: приведение типов: преобразование "HourlyEmploye *" в "Employe *" существует, но недоступно

Помогите....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2013, 12:54     Ошибка в векторе ссылок на базовый класс
Посмотрите здесь:

C++ абстрактный базовый класс
C++ typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
C++ Создать базовый класс - Array и производный класс - Money для работы денежной суммы
Указатели в базовом классе на базовый класс и производный класс C++
C++ Создать класс - данные - абстрактный базовый класс. Создать производные классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
08.10.2013, 12:57     Ошибка в векторе ссылок на базовый класс #2
Это наследование?
C++
1
class HourlyEmploye:Employe
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
08.10.2013, 12:58  [ТС]     Ошибка в векторе ссылок на базовый класс #3
ну вообще то да)
Епт, я понял, public забыл )
я сижу уже 3 часа над этой проблемой и не мог понять где ошибка, класс раза 3 переписал
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
08.10.2013, 13:02     Ошибка в векторе ссылок на базовый класс #4
И какая же секция наследуется по умолчанию?
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
08.10.2013, 13:10  [ТС]     Ошибка в векторе ссылок на базовый класс #5
Цитата Сообщение от Ilot Посмотреть сообщение
И какая же секция наследуется по умолчанию?
Я не знаю, по моему никакая
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
08.10.2013, 13:15     Ошибка в векторе ссылок на базовый класс #6
Цитата Сообщение от MousePro Посмотреть сообщение
Я не знаю, знаю только что есть 3 типа наследования,private, protected и public
Теперь на своем опыте узнали, что по умолчанию наследуется private секция
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2013, 13:20     Ошибка в векторе ссылок на базовый класс
Еще ссылки по теме:

C++ Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
C++ Опишите базовый класс автомобилей и производные.(Где ошибка?)
C++ Как в функции my_function преобразовать ссылку на базовый класс в ссылку на класс B или С

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

Или воспользуйтесь поиском по форуму:
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
08.10.2013, 13:20  [ТС]     Ошибка в векторе ссылок на базовый класс #7
Цитата Сообщение от Ilot Посмотреть сообщение
Теперь на своем опыте узнали, что по умолчанию наследуется private секция
Да , я на Вике уже прочитал
Yandex
Объявления
08.10.2013, 13:20     Ошибка в векторе ссылок на базовый класс
Ответ Создать тему
Опции темы

Текущее время: 17:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru