Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
1

Класс Employee, проблемы реализации

20.08.2011, 21:19. Показов 6012. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание:
Создайте класс с именем Employee («служащий»), включающий в качестве
элементов данных три информационных пункта: имя (тип string), фамилию (тип
string) и месячную зарплату (тип int). Ваш
класс должен иметь конструктор, инициализирующий три элемента данных.
Предусмотрите set- и get -функции для каждого элемента данных.
Если зарплата не
положительна, устанавливайте ее равной 0. Напишите тестовую программу,
демонстрирующую возможности класса Employee. Создайте два объекта Employee и
выведите годовую зарплату для каждого объекта. Затем поднимите зарплату каждого
из «служащих» на 10% и снова выведите их годовую зарплату.


Запнулся и не знаю как реализовать выделенное жирным шрифтом

Вот что я сделал:

Employee.h - интерфейс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Employee
{
public:
    string Name(string);
    string SurName(string);
    int zarplata();
 
    void setName(string);
    void setSurName(string);
    void setZarplata(string);
 
    string getName();
    string getSurName();
    string getZarplata();
};
Employee.cpp - файл реализации
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include <iostream>
#include "Employee.h"
 
using namespace std;
 
//следующие три строчки кода вообще лубуда какая то не правильная (
Employee::Name(string)
{
        
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2011, 21:19
Ответы с готовыми решениями:

Производный класс Employee и базовый класс Person
Класс Person содержит информацию о человеке - firstName - lastName - age - address -...

Класс Employee
Выдает ошибку, не могу понять в чем дело. Писал код в qt employee.h #ifndef EMPLOYEE_H...

Класс Employee
Создал класс, все работает, но опять одно из значений не корректно отображается в консоли.. а...

Создать класс employee
Создайте класс employee, который содержит имя (объект класса string) и но- мер (типа long)...

33
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
20.08.2011, 21:28 2
TBIKC, Читайте главу "Классы" пока не поймете, это же основы.
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
20.08.2011, 21:33  [ТС] 3
В Employee.cpp изменил
C++
1
2
3
4
5
6
7
8
Employee::Employee()
{
        
}
void setName()
{
    cout << "Hello\n" <<endl;
}
Да я вот прочитал главу, вроде как понял и тут практическое задание
Я в принципе знаю что такое классы, знаю js и php
0
Заблокирован
20.08.2011, 21:38 4
Цитата Сообщение от TBIKC Посмотреть сообщение
Задание:
Создайте класс с именем Employee («служащий»), включающий в качестве
элементов данных три информационных пункта: имя (тип string), фамилию (тип
string) и месячную зарплату (тип int). Ваш
класс должен иметь конструктор, инициализирующий три элемента данных.
Предусмотрите set- и get -функции для каждого элемента данных.
Если зарплата не
положительна, устанавливайте ее равной 0. Напишите тестовую программу,
демонстрирующую возможности класса Employee. Создайте два объекта Employee и
выведите годовую зарплату для каждого объекта. Затем поднимите зарплату каждого
из «служащих» на 10% и снова выведите их годовую зарплату.


Запнулся и не знаю как реализовать выделенное жирным шрифтом

Вот что я сделал:

Employee.h - интерфейс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Employee
{
public:
    string Name(string);
    string SurName(string);
    int zarplata();
 
    void setName(string);
    void setSurName(string);
    void setZarplata(string);
 
    string getName();
    string getSurName();
    string getZarplata();
};
Employee.cpp - файл реализации
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include <iostream>
#include "Employee.h"
 
using namespace std;
 
//следующие три строчки кода вообще лубуда какая то не правильная (
Employee::Name(string)
{
        
}
Раз в вашем классе присутствуют методы set и get, то очевидно члены класса, задающие имена служащего и его зарпалту, должны быть закрытыми. Поэтому начало вашего класса должно выглядеть так:

C++
1
2
3
4
5
6
7
class Employee
{
private:
    string Name;
    string SurName;
    int zarplata;
public:

Такая конструкция, как

C++
1
    string Name(string);
на самом деле определяет не поле вашего класса, а функцию, которая принимает параметр типа string и возвращает значение также типа ыtring.

Далее, в вашем задании сказано, что вы должны создать конструктор, принимающий три значения, которые должны инициализировать члены вашего класса. Конструктор имеет тоже имя, что и название класса.

Поэтому ваш конструктор должен выглядеть примерно так
C++
1
Employee( string Name, string SurName, int zarplata );
Либо строковые переменные можно передавать по ссылке (при условии, что вы уже изучали ссылки)

C++
1
Employee( const string &Name, const string &SurName, int zarplata );
Когда напишите конструктор, то можете задавать следующий вопрос, что у вас не получается.
1
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
20.08.2011, 21:48  [ТС] 5
Понял, а set и get функции я правильно реализовал ?
C++
1
2
3
4
5
6
7
void setName(string);
void setSurName(string);
void setZarplata(string);
 
string getName();
string getSurName();
string getZarplata();
Сделал файл реализации таким:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <iostream>
#include "Employee.h"
 
using namespace std;
 
Employee::Employee(string name,string surName,int zarplata)
{
        setName("Anton");
        setSurName("Cherepanov");
        setZarplata(15000);
}
Выдает ошибку:
Employee.CPP(8): error C2511: Employee::Employee(std::string,std::string,int): перегруженная функция-член не найдена в "Employee"
1> c:\users\антон\documents\visual studio 2010\projects\employee\employee\Employee.h(3): см. объявление "Employee"


Мне кажется после объявления в интерфейсе конструктора, я пишу чушь...

C++
1
2
3
4
5
6
Employee::Employee(string name,string surName,int zarplata)
{
        setName("Anton");
        setSurName("Cherepanov");
        setZarplata(15000);
}
0
Заблокирован
20.08.2011, 21:51 6
значити ты не объявил конструктора с такими параметрами

Добавлено через 24 секунды
геттеры должны быть константными
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
20.08.2011, 21:51 7
TBIKC,
Цитата Сообщение от TBIKC Посмотреть сообщение
Понял, а set и get функции я правильно реализовал ?
get-функции сделайте константными..
0
Заблокирован
20.08.2011, 21:52 8
а сеттеры принимать ссылку на константу, а не принимать по значению
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
20.08.2011, 21:54  [ТС] 9
Цитата Сообщение от nameless Посмотреть сообщение
TBIKC,

get-функции сделайте константными..
Зачем ?
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
20.08.2011, 22:04 10
TBIKC, затем чтобы она (функция) не могла изменять вызывающий ее объект. Также объявив ее как const, мы не сможем вызвать неконстантные методы.
1
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
20.08.2011, 22:07 11
ыыыы.
задание из струструпа походу
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.08.2011, 13:22 12
Нет, это задание из Дейтлов. Вот вроде так делал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Employee
{
public:
    Employee( std::string, std::string, int );
    void setName( std::string );
    void setSurname( std::string );
    void setSalary( int );
    std::string getName();
    std::string getSurname();
    int getSalary();
private:
    int salary;
    std::string name, surName;
};
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
Employee::Employee( std::string thisName, std::string thisSurname, int thisSalary )
{
    setName( thisName );
    setSurname( thisSurname );
    setSalary( thisSalary );
}
 
void Employee::setName( std::string thisName )
{
    name = thisName;
}
 
void Employee::setSurname( std::string thisSurname )
{
    surName = thisSurname;
}
 
void Employee::setSalary( int thisSalary )
{
    if ( thisSalary < 0 )
    {
        std::cout << "Zarplata ne mojet bit` otricatel`noi i poetomu budet ravna 0." << std::endl;
        salary = 0;
    }
    else
        salary = thisSalary;
}
 
std::string Employee::getName()
{
    return name;
}
 
std::string Employee::getSurname()
{
    return surName;
}
 
int Employee::getSalary()
{
    return salary;
}
1
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
21.08.2011, 13:30  [ТС] 13
А зачем в некоторых строчках кода используеться this ?

Как я нашёл в гугле это Ссылка на себя, тока я не понимаю зачем она и как она работает
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
21.08.2011, 13:33 14
Цитата Сообщение от TBIKC Посмотреть сообщение
А зачем в некоторых строчках кода используеться this ?
В коде Toshkarik нет ни одного this, у него просто имена переменных такие
Toshkarik, было бы неплохо принимать константную ссылку, а не весь объект.
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
Employee( std::string, std::string, int );
C++
1
Employee(const std::string &, const std::string &, int);
И так во всех подобных методах.
1
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
21.08.2011, 13:38  [ТС] 15
было бы неплохо принимать константную ссылку, а не весь объект.


Ещё не проходил такого тока 3 глава, Введение в классы и объекты, книга Дейтелов
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.08.2011, 13:46 16
fasked, я не передавал по ссылке потому что в этой главе еще не было их Они изучаются дальше.
0
4 / 4 / 1
Регистрация: 20.08.2011
Сообщений: 51
21.08.2011, 14:42 17
C++
1
2
3
4
5
6
Employee::Employee(string name,string surName,int zarplata)
{
                setName(name);
                setSurName(surName);
                setZarplata(zarplata);
}
Также можно инициализировать по умолчанию:
C++
1
Employee(string = " ",string = " ",int = 0)
В мэйне инциализировать при таком подходе можно так:

C++
1
Employee person("вася","Пупкин","10000");
пс недавно начал изучать язык, могу ошибаться, мб кто-нибудь поправит
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
21.08.2011, 14:43 18
4e87, я не думаю, что логичным решением было бы позволять создавать безымянных работников.
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
21.08.2011, 15:10  [ТС] 19
Ошибка в Последних 2х строчках кода
Ничего понять не могу я создал объект P1 класса Employee и хочу задать ему имя Антон

Что не так ?

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
#include "stdafx.h"
#include <iostream>
#include "Employee.h"
 
using namespace std;
 
Employee::Employee(string Name,string SurName, int Salary)
{
        setName(Name);
        setSurName(SurName);
        setSalary(Salary);
}
void Employee::setName(string thisName)
{
    Name = thisName;
}
void Employee::setSurName(string thisSurName)
{
    Name = thisSurName;
}
void Employee::setSalary(int thisSalary)
{
    if(Salary < 0 )
    {
        cout << "Зарплата не может быть отрицательной!" << endl;
        Salary = 0;
    }
    else
        Salary = thisSalary;
}
 
string Employee::getName()const
{
    return Name;
}
string Employee::getSurName()const
{
    return SurName;
}
int Employee::getSalary()const
{
    return Salary;
}
 
 
    Employee P1;
    P1.setName("Anton");
Добавлено через 5 минут
Посмотрел на конструктор и решил сделать так
C++
1
2
Employee P1("Anton","Cherepanov",10000);
P1.getSurname();
Но ошибка всё таже !

Добавлено через 16 минут
Сделал
C++
1
2
3
4
5
    
        Employee P1("Anton","Cherepanov",10000);
    P1.setName("Roma");
    
    cout << "Зарплата равна " << P1.getName() << endl;
Подчёркивает проблему в << попробовал P1.getSalary() всё нормально
0
0 / 0 / 0
Регистрация: 29.07.2011
Сообщений: 17
26.10.2011, 10:41 20
По этой задачки я сделал так
Код Employee 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
#include <iostream>
 
using std::cout;
using std::endl;
 
#include "Employee.h"
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    Employee emp1("Sergey","M", 32000);
    Employee emp2("Evgeniya","M", 25000);
    
    
    cout << "Ãîäîâîé çàðàáîòîê ñîòðóäíèêà" << " " << emp1.getName() << " " << emp1.getSurname() 
    << " " << emp1.getSalary() << endl;
    cout << "Ãîäîâîé çàðàáîòîê ñîòðóäíèêà" << " " << emp2.getName() << " " << emp2.getSurname() 
    << " " << emp2.getSalary() << endl;  
    system("PAUSE");
    return 0;
}
Программа работает,
но у меня возникла проблема как поднять з/п на 10 %???
0
26.10.2011, 10:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2011, 10:41
Помогаю со студенческими работами здесь

Изменить класс Employee
Всем доброго время суток. Второй день бьюсь. нужно создать класс Employee так чтобы можно было...

Поясните ошибки, класс employee
Здравствуйте. Поясните мои ошибки пожалуйста. Нужно создать класс employe, включив в него класс...

Создать абстрактный базовый класс Employee
МОЖНО ПОЖАЛУЙСТА ПОДРОБНО,Я ХОЧУ РАЗОБРАТЬСЯ 1. Создать абстрактный базовый класс Employee...

Создайте класс employee. Как написать программу?
Создайте класс employee. Класс должен включать поле (массив) типа char для хранения фамилии...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru