Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
#1

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

01.10.2013, 22:41. Просмотров 446. Ответов 10
Метки нет (Все метки)

Задача по наследованию:
Написать класс "Служащие" которые получают только процент от продаж и "Служащие" которые получают % и мин. З\п.
Я пока написал 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 &"


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

Дезинформация в книге? Или я что-то не понял - C++
Короче, читаю тут объектно-ориентированное программирование от Лафоре, а тут в тесте херня какая-то. Вроде отвечаю, записываю ответы на...

не понимаю что за ошибка - C++
привет всем! как исправить ошибку, который выдает компилятор /home/september/console/priority_queueNodeATD/pq_node.cpp:-1: In member...

Ошибка в учебнике или я чего то не понимаю - C++
В учебнике Дейтела Харви при изучении полиморфизма натолкнулся на такую вещь, создается абстрактный класс, его наследники, а потом в майн...

Компилятор не дает написать main без int. Ошибка в книге, или в С так можно? - C++
В книге И.Ш. Хабибуллина &quot;Программирование на языке высокого уровня C/C++&quot; во всех примерах пишут так: main() { } ...

Вылетает ошибка ".exe has triggered a breakpoint" Не понимаю, что не так - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int pSourceData = 10; int nSourceDataLen =...

Опечятка в книге или нет? - C++
Добрый день) вот по книге пример программы и результата ниже. по моему в конце должно быть еще число 11!или я не прав?

10
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
02.10.2013, 02:33 #2
Цитата Сообщение от MousePro Посмотреть сообщение
значит в учебнике ошибка?
возможно это Вы не внимательно переписали.
Цитата Сообщение от MousePro Посмотреть сообщение
Я как бы сам понимаю, я же не объект класса передаю
зато есть конструктор у std::string, с помощью которого создастся временный объект, ссылка на который и будет передана.

пусть конструктор принимает константные ссылки в качестве параметров:
C++
1
CommissionEmployee(const string &, const string &,const string&,const double,const double);
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 12:17  [ТС] #3
ага, я понял, но как тогда изменить такой объект если вдруг он окажеться неправильно введен?? Создать временный объект класса стринг, записать в него константный объект и проверять его ( временный ) ?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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, его тогда проверяйте и меняйте, а не переданный параметр. И вообще я бы отделил ввод/вывод от класса служащего, тогда бы и не пришлось думать над такими проблемами
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 13:27  [ТС] #5
А если сразу передавать проверенные объекты в класс? В мейне проверять ввод и передавать объект уже проверенный. Вы об этом говорите?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
02.10.2013, 13:32 #6
если, например, потом придется брать часть данных из файла, а часть с консоли, то Вам придется перелопатить весь класс.
Цитата Сообщение от MousePro Посмотреть сообщение
А если сразу передавать проверенные объекты в класс?
Проверять в функциях класса, если не подходит, то оставлять предыдущее имя и, например, возвращать false, а в случае успеха возвращать true. Можно и исключение бросить, но это жестковато для таких событий.
Хотя с чем вообще связана проверка, что имя не может быть более 25 символов?
0
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 13:35  [ТС] #7
Цитата Сообщение от Croessmah Посмотреть сообщение
если, например, потом придется брать часть данных из файла, а часть с консоли, то Вам придется перелопатить весь класс.

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

Не по теме:

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

1
Croessmah
02.10.2013, 14:29
  #10

Не по теме:

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

0
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
02.10.2013, 14:31  [ТС] #11
блин, я не специально
п.с Всегда испытывал проблемы с правописанием
0
02.10.2013, 14:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2013, 14:31
Привет! Вот еще темы с ответами:

Ошибка или что-то.. - C++
приветствую Вас... как говорится, нид хелп... завтра сдавать программу в универе , да и много чего, мозг выжат... всё, что сумел написать,...

Ошибка в книге? - C++
Я тут наткнулся на непонятную ситуацию. Кто-нибудь скажет, почему там так написано(фото ниже)? (или это опечатка?) И еще у меня вопрос, я...

Ошибка VC++ или не понятно что - C++
Вот такое сообщение при выполнение данной программы. Прогамма работает правильно хоть и пропускает пдчеркнутые пункты. Не знаю в чем...

Что вы думаете об этой книге? - C++
http://www.ozon.ru/context/detail/id/5531965/#tab_descr Ее другу посоветовали,мне кажется что она больше для тех,кто уже что-то пишет на...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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