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

Ошибка в книге или я что то не понимаю ? - C++

Восстановить пароль Регистрация
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
01.10.2013, 22:41     Ошибка в книге или я что то не понимаю ? #1
Задача по наследованию:
Написать класс "Служащие" которые получают только процент от продаж и "Служащие" которые получают % и мин. З\п.
Я пока написал 1 базовый класс и столкнулся с проблемой.


Вот сам класс

CommissionEmployee.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
#ifndef COMMISSIONEMPLOYEE_H
#define COMMISSIONEMPLOYEE_H
 
#include "string"
using std::string;
 
class CommissionEmployee
{
public:
    CommissionEmployee(string &, string &,string&,const double,const double);
    void setEmployeeName(string&);
    void setEmployeeSurname(string&);
    void setEmployeeSSN(string&);
    void setEmployeeSale(const double);
    void setEmployeeRate(const double);
    string getEmployeeName();
    string getEmployeeSSN();
    string getEmployeeSurname();
    double getEmployeeSale();
    double getEmployeeRate();
    void PrintSalary ();
private:
    string name;
    string surname;
    string ssn;
    double sale;
    double rate;
};
 
#endif COMMISSIONEMPLOYEE_H



CommissionEmployee.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
#include "CommissionEmployee.h"
#include "iostream"
#include "iomanip"
using std::setprecision;
using std::fixed;
using std::cout;
using std::cin;
using std::endl;
 
CommissionEmployee::CommissionEmployee(string &Name,string &Surname,string &SSN,const double Sale,const double Rate)
    
{
    setlocale(LC_ALL,"");
setEmployeeName(Name);
setEmployeeSurname(Surname);
setEmployeeSSN(SSN);
setEmployeeSale(Sale);
setEmployeeRate(Rate);
cout<<"Конструктор базового класса \n";
}
void CommissionEmployee::setEmployeeName(string & Name)
{
    while(true)
    {
        if(Name.size() >25)
        {
        cout<<"Ошибка, имя слишком большое,введите заного\n";
        cin>>Name;
        }
        else 
        {
        name=Name;
        break;
        }
    }
}
void CommissionEmployee::setEmployeeSurname(string & Surname)
{
    while(true)
    {
        if(Surname.size() >25)
        {
        cout<<"Ошибка, фамилия слишком большое,введите заного\n";
        cin>>Surname;
        }
        else 
        {
        surname=Surname;
        break;
        }
    }
}
void CommissionEmployee::setEmployeeSSN (string & SSN)
{
    while(true)
    {
        if(SSN.size()>=10)
        {
        cout<<"Ошибка, страховка слишком большая,введите заного\n";
        cin>>SSN;
        }
        else 
        {
        ssn=SSN;
        break;
        }
    }
}
void CommissionEmployee::setEmployeeSale(double Sale)
{
    sale=(Sale<0.0)?0.0:Sale;
}
void CommissionEmployee::setEmployeeRate(double Rate)
{
 
    rate=(Rate<0.0)?0.0:Rate;
}
string CommissionEmployee::getEmployeeName(){return name;}
string CommissionEmployee::getEmployeeSurname(){return surname;}
string CommissionEmployee::getEmployeeSSN(){return ssn;}
double CommissionEmployee::getEmployeeSale(){return sale;}
double CommissionEmployee::getEmployeeRate(){return rate;}
void CommissionEmployee::PrintSalary()
{
    cout<<fixed<<setprecision(2);
    cout<<"Имя: "<<name<<endl;
    cout<<"Фамилия: "<<surname<<endl;
    cout<<"Страховка: "<<ssn<<endl;
    cout<<"Процентная ставка: "<<rate<<endl;
    cout<<"Зарплата: "<<sale*rate<<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
#include "CommissionEmployee.h"
#include "iostream"
#include "string"
using std::string;
using std::cout;
using std::cin;
 
int main()
{
    setlocale(LC_ALL,"");
string a[3];
cout<<"Введи Имя : ";
cin>>a[0];
cout<<"Введи Фамилию : ";
cin>>a[1];
cout<<"Введи страховку : ";
cin>>a[2];
 
 
CommissionEmployee Employee(a[0],a[1],a[2],25000,0.08);
 
 
Employee.PrintSalary();
 
system ("pause");
return 0;
}



Проблема в том что так как написано в ученике не получается
в учебнике так:

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "CommissionEmployee.h"
#include "iostream"
#include "string"
using std::string;
using std::cout;
using std::cin;
 
int main()
{
    setlocale(LC_ALL,"");
 
 
CommissionEmployee Employee("Вася","Пупкин","123456789",25000,0.08);
 
 
Employee.PrintSalary();
 
system ("pause");
return 0;
}

Ошибка:
Кликните здесь для просмотра всего текста
CommissionEmployee::CommissionEmployee(std::string &,std::string &,std::string &,const double,const double): невозможно преобразовать параметр 1 из "const char [4]" в "std::string &"


Я как бы сам понимаю, я же не объект класса передаю, значит в учебнике ошибка??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2013, 22:41     Ошибка в книге или я что то не понимаю ?
Посмотрите здесь:

Ошибка или что-то.. C++
Опечятка в книге или нет? C++
C++ Что вы думаете об этой книге?
Ошибка в книге Шилдта? C++
Ошибка в листинге в книге C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,875
Записей в блоге: 2
Завершенные тесты: 1
02.10.2013, 02:33     Ошибка в книге или я что то не понимаю ? #2
Цитата Сообщение от MousePro Посмотреть сообщение
значит в учебнике ошибка?
возможно это Вы не внимательно переписали.
Цитата Сообщение от MousePro Посмотреть сообщение
Я как бы сам понимаю, я же не объект класса передаю
зато есть конструктор у std::string, с помощью которого создастся временный объект, ссылка на который и будет передана.

пусть конструктор принимает константные ссылки в качестве параметров:
C++
1
CommissionEmployee(const string &, const string &,const string&,const double,const double);
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 12:17  [ТС]     Ошибка в книге или я что то не понимаю ? #3
ага, я понял, но как тогда изменить такой объект если вдруг он окажеться неправильно введен?? Создать временный объект класса стринг, записать в него константный объект и проверять его ( временный ) ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,875
Записей в блоге: 2
Завершенные тесты: 1
02.10.2013, 12:19     Ошибка в книге или я что то не понимаю ? #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    while(true)
    {
        if(Name.size() >25)
        {
        cout<<"Ошибка, имя слишком большое,введите заного\n";
        cin>>Name;
        }
        else 
        {
        name=Name;
        break;
        }
    }
у Вас в классе есть член name, его тогда проверяйте и меняйте, а не переданный параметр. И вообще я бы отделил ввод/вывод от класса служащего, тогда бы и не пришлось думать над такими проблемами
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 13:27  [ТС]     Ошибка в книге или я что то не понимаю ? #5
А если сразу передавать проверенные объекты в класс? В мейне проверять ввод и передавать объект уже проверенный. Вы об этом говорите?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,875
Записей в блоге: 2
Завершенные тесты: 1
02.10.2013, 13:32     Ошибка в книге или я что то не понимаю ? #6
если, например, потом придется брать часть данных из файла, а часть с консоли, то Вам придется перелопатить весь класс.
Цитата Сообщение от MousePro Посмотреть сообщение
А если сразу передавать проверенные объекты в класс?
Проверять в функциях класса, если не подходит, то оставлять предыдущее имя и, например, возвращать false, а в случае успеха возвращать true. Можно и исключение бросить, но это жестковато для таких событий.
Хотя с чем вообще связана проверка, что имя не может быть более 25 символов?
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 13:35  [ТС]     Ошибка в книге или я что то не понимаю ? #7
Цитата Сообщение от Croessmah Посмотреть сообщение
если, например, потом придется брать часть данных из файла, а часть с консоли, то Вам придется перелопатить весь класс.

Проверять в функциях класса, если не подходит, то оставлять предыдущее имя и, например, возвращать false, а в случае успеха возвращать true. Можно и исключение бросить, но это жестковато для таких событий.
Хотя с чем вообще связана проверка, что имя не может быть более 25 символов?
Да не, проверка так учебная, просто хочу узнать как лучше... Я просто проверял постоянно в функциях класса set, но тут столкнулся с const и начал выдумывать решение
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,875
Записей в блоге: 2
Завершенные тесты: 1
02.10.2013, 13:37     Ошибка в книге или я что то не понимаю ? #8
C++
1
2
3
4
5
6
name = Name ;    
while(name.size ( ) > 25 )
    {
        cout<<"Ошибка, имя слишком большое,введите заного\n";
        cin>>name;
    }
Tulosba
02.10.2013, 14:01
  #9

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
введите заного
заруко

Croessmah
02.10.2013, 14:29
  #10

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
заруко
есть такое дело
P.S. копипаст

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2013, 14:31     Ошибка в книге или я что то не понимаю ?
Еще ссылки по теме:

C++ не понимаю что за ошибка
C++ Ошибка VC++ или не понятно что
C++ Компилятор не дает написать main без int. Ошибка в книге, или в С так можно?

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

Или воспользуйтесь поиском по форуму:
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 14:31  [ТС]     Ошибка в книге или я что то не понимаю ? #11
блин, я не специально
п.с Всегда испытывал проблемы с правописанием
Yandex
Объявления
02.10.2013, 14:31     Ошибка в книге или я что то не понимаю ?
Ответ Создать тему
Опции темы

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