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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как можно составить формулу составления кода? http://www.cyberforum.ru/cpp-beginners/thread971971.html
здравствуйте, сломал голову на одной задачке, уже даже затрудняюсь как правильно назвать все это, но это не главное, главное вот что есть последовательность номеров и к каждому из них прилагается код. Как можно составить формулу составления кода? или есть какие либо программы, которые выполняют такие функции? вот номера с кодами 154039 C735C4 154040 267361 154041 ...
C++ Когда какая функция вызывается? Вот две функции const Item &figure::operator (int i) const { cout << "const" << endl; return massiv; } Item &figure::operator (int i) { cout << "no const" << endl; http://www.cyberforum.ru/cpp-beginners/thread971967.html
Ошибка приложения C++
У меня возникла следующая проблема: написание и компиляция программы выдаёт ошибку обращения к памяти. #include <iostream> #include<windows.h> #include <conio.h> using namespace std; char bufRus; char* Rus(const char* text) { CharToOem(text, bufRus); return bufRus;
Расшифровка истории qip C++
Доброго времени! Небольшое вступление: Я добрался до 12й главы "Потоки и файлы" Лафоре. И хочу попытаться справиться со следующей задачей: По работе мне приходится много пользоваться ICQ. Одно время я использовал клиент QIP2012, затем какое то время пришлось использовать стандартный клиент ICQ, а потом опять опять вернулся на QIP2012. В итоге у меня получилось 3 файла истории. Цель:...
C++ не могу избавится от ошыбки http://www.cyberforum.ru/cpp-beginners/thread971953.html
Помогите избавится от ошыбки, в программе нужно обработать исключение... #include <except.h> #include <iostream.h> #pragma hdrstop #include <condefs.h>
C++ Выбор visual studio Подскажите, нужно выбрать лицензионную версию visual studio. Разработка различных приложений, ООП, работа приложений на версиях windows, начиная с xp(минимум). подробнее

Показать сообщение отдельно
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366

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

08.10.2013, 12:54. Просмотров 196. Ответов 6
Метки (Все метки)

Пишу задачку по полиморфизму, задача: создать иерархию служащих , где каждый служащий получает разную зарплату.

Вот собственно классы
Абстрактный класс
Кликните здесь для просмотра всего текста
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 *" существует, но недоступно

Помогите....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru