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

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

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

Студворк — интернет-сервис помощи студентам
Задание:
Создайте класс с именем 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.08.2011, 21:19
Ответы с готовыми решениями:

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

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

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

33
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
20.08.2011, 21:28
TBIKC, Читайте главу "Классы" пока не поймете, это же основы.
0
web dev
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
20.08.2011, 21:33  [ТС]
В 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
Цитата Сообщение от 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
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
20.08.2011, 21:48  [ТС]
Понял, а 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::stri ng,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
значити ты не объявил конструктора с такими параметрами

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

get-функции сделайте константными..
Зачем ?
0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
20.08.2011, 22:04
TBIKC, затем чтобы она (функция) не могла изменять вызывающий ее объект. Также объявив ее как const, мы не сможем вызвать неконстантные методы.
1
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
20.08.2011, 22:07
ыыыы.
задание из струструпа походу
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.08.2011, 13:22
Нет, это задание из Дейтлов. Вот вроде так делал.
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
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
21.08.2011, 13:30  [ТС]
А зачем в некоторых строчках кода используеться this ?

Как я нашёл в гугле это Ссылка на себя, тока я не понимаю зачем она и как она работает
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
21.08.2011, 13:33
Цитата Сообщение от 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
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
21.08.2011, 13:38  [ТС]
было бы неплохо принимать константную ссылку, а не весь объект.


Ещё не проходил такого тока 3 глава, Введение в классы и объекты, книга Дейтелов
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.08.2011, 13:46
fasked, я не передавал по ссылке потому что в этой главе еще не было их Они изучаются дальше.
0
4 / 4 / 1
Регистрация: 20.08.2011
Сообщений: 51
21.08.2011, 14:42
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
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
21.08.2011, 14:43
4e87, я не думаю, что логичным решением было бы позволять создавать безымянных работников.
0
web dev
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
21.08.2011, 15:10  [ТС]
Ошибка в Последних 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
По этой задачки я сделал так
Код 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2011, 10:41
Помогаю со студенческими работами здесь

Создать класс employee
Создайте класс employee, который содержит имя (объект класса string) и но- мер (типа long) служащего. Включите в него метод getdata(),...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru