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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
#1

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

20.08.2011, 21:19. Просмотров 2989. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2011, 21:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс Employee, проблемы реализации (C++):

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

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

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

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

Создать класс Employee, содержащий следующие элементы: - C++
Создать класс Employee, содержащий следующие элементы: - поле «ФИО» char* FIO; - поле «Табельный номер» int Number; - поле...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
20.08.2011, 21:28 #2
TBIKC, Читайте главу "Классы" пока не поймете, это же основы.
0
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
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
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
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
LosAngeles
Заблокирован
20.08.2011, 21:51 #6
значити ты не объявил конструктора с такими параметрами

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

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

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


Ещё не проходил такого тока 3 глава, Введение в классы и объекты, книга Дейтелов
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 13:38
Привет! Вот еще темы с ответами:

Создать класс EMPLOYEE, производный от класса PERSON и использовать их для вычисления зарплаты сотрудника - C++
Базовый класс: ЧЕЛОВЕК (PERSON) Имя (name) – string Возраст (age) – int Создать производный класс EMPLOYEE, имеющий поля: ...

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

Создайте класс с именем Employee, включающий в качестве элементов данных три информационных пункта: имя, фамилию и месячную зарплату - C++
Дело обстоит так: Прочитав и, как я думал, поняв 3ю главу книги &quot;Как программировать на с++&quot; Дейтелов пришло время задачек. Немного...

Реализовать класс "Employee" - C++
{ссылка вырезана} Напишите пожалуйста код с объяснениями желательно


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.08.2011, 13:38
Ответ Создать тему
Опции темы

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