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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
20.08.2011, 21:19     Класс Employee, проблемы реализации #1
Задание:
Создайте класс с именем 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)
{
        
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2011, 21:19     Класс Employee, проблемы реализации
Посмотрите здесь:

C++ Создать класс Employee, содержащий следующие элементы:
Изменить класс Employee C++
Создайте класс с именем Employee, включающий в качестве элементов данных три информационных пункта: имя, фамилию и месячную зарплату C++
Класс, отделение интерфейса от реализации C++
C++ Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
20.08.2011, 21:28     Класс Employee, проблемы реализации #2
TBIKC, Читайте главу "Классы" пока не поймете, это же основы.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
20.08.2011, 21:33  [ТС]     Класс Employee, проблемы реализации #3
В Employee.cpp изменил
C++
1
2
3
4
5
6
7
8
Employee::Employee()
{
        
}
void setName()
{
    cout << "Hello\n" <<endl;
}
Да я вот прочитал главу, вроде как понял и тут практическое задание
Я в принципе знаю что такое классы, знаю js и php
Сыроежка
Заблокирован
20.08.2011, 21:38     Класс Employee, проблемы реализации #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 );
Когда напишите конструктор, то можете задавать следующий вопрос, что у вас не получается.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
20.08.2011, 21:48  [ТС]     Класс Employee, проблемы реализации #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);
}
LosAngeles
Заблокирован
20.08.2011, 21:51     Класс Employee, проблемы реализации #6
значити ты не объявил конструктора с такими параметрами

Добавлено через 24 секунды
геттеры должны быть константными
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
20.08.2011, 21:51     Класс Employee, проблемы реализации #7
TBIKC,
Цитата Сообщение от TBIKC Посмотреть сообщение
Понял, а set и get функции я правильно реализовал ?
get-функции сделайте константными..
LosAngeles
Заблокирован
20.08.2011, 21:52     Класс Employee, проблемы реализации #8
а сеттеры принимать ссылку на константу, а не принимать по значению
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
20.08.2011, 21:54  [ТС]     Класс Employee, проблемы реализации #9
Цитата Сообщение от nameless Посмотреть сообщение
TBIKC,

get-функции сделайте константными..
Зачем ?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
20.08.2011, 22:04     Класс Employee, проблемы реализации #10
TBIKC, затем чтобы она (функция) не могла изменять вызывающий ее объект. Также объявив ее как const, мы не сможем вызвать неконстантные методы.
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
20.08.2011, 22:07     Класс Employee, проблемы реализации #11
ыыыы.
задание из струструпа походу
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.08.2011, 13:22     Класс Employee, проблемы реализации #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;
}
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
21.08.2011, 13:30  [ТС]     Класс Employee, проблемы реализации #13
А зачем в некоторых строчках кода используеться this ?

Как я нашёл в гугле это Ссылка на себя, тока я не понимаю зачем она и как она работает
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.08.2011, 13:33     Класс Employee, проблемы реализации #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);
И так во всех подобных методах.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
21.08.2011, 13:38  [ТС]     Класс Employee, проблемы реализации #15
было бы неплохо принимать константную ссылку, а не весь объект.


Ещё не проходил такого тока 3 глава, Введение в классы и объекты, книга Дейтелов
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.08.2011, 13:46     Класс Employee, проблемы реализации #16
fasked, я не передавал по ссылке потому что в этой главе еще не было их Они изучаются дальше.
4e87
4 / 4 / 1
Регистрация: 20.08.2011
Сообщений: 51
21.08.2011, 14:42     Класс Employee, проблемы реализации #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");
пс недавно начал изучать язык, могу ошибаться, мб кто-нибудь поправит
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.08.2011, 14:43     Класс Employee, проблемы реализации #18
4e87, я не думаю, что логичным решением было бы позволять создавать безымянных работников.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
21.08.2011, 15:10  [ТС]     Класс Employee, проблемы реализации #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() всё нормально
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 10:41     Класс Employee, проблемы реализации
Еще ссылки по теме:

C++ Класс редактирования данных. Нужны советы по реализации
C++ Класс Employee
Создать класс для реализации динамического массива C++

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

Или воспользуйтесь поиском по форуму:
nova555
0 / 0 / 0
Регистрация: 29.07.2011
Сообщений: 17
26.10.2011, 10:41     Класс Employee, проблемы реализации #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 %???
Yandex
Объявления
26.10.2011, 10:41     Класс Employee, проблемы реализации
Ответ Создать тему
Опции темы

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