Member 13817351 Ответов: 4

Как решить эту программу?


Проблема: он проинструктирован, что принимает значение от пользователя в функции setvalue, тогда какая польза от перегруженного конструктора в этой программе?

От вас требуется внедрить систему управления персоналом. Там будет класс employee, имеющих следующие атрибуты: наименование(строка), Father_Name(строку), код emp_id(инт), дата рождения(дата), БПС(1-22), job_Type(частные, государственные или автономные) Он должен иметь два конструктора, то есть конструктор по умолчанию и перегруженный конструктор. Атрибуты в конструкторах должны быть инициализированы через список инициализаторов. Класс Employee должен иметь следующие функции: setRecord и showRecord. В setEmployeeRecord ввод данных должен быть взят от пользователя, в то время как showRecord должен печатать сведения о сотруднике.

Что я уже пробовал:

Я пытался, но это дает следующую ошибку.
1. введите 'int' неожиданно
2. 'emp_id': необъявленный идентификатор
3. 'bps': необъявленный идентификатор

#include<iostream>
#include<string>
using namespace std;
class Employee 
{
	string name;
	string father_name;
	int emp_id;
	string date;
	int bps;
	string job_Type;
public:
	Employee();
	Employee(string nam, string f_name, int id, string dt, int b, string job) :name(nam), father_name(f_name), emp_id(id), bps(b), job_Type(job) {}
	void setRecord(string nam, string f_name, int id, string dt, int b, string job);
	void showRecord();
};
Employee::Employee() { /*cout << "Default Constructor" << endl;*/ }
void Employee::setRecord(string nam, string f_name, int id, string dt, int b, string job)
{
	cout << "Name of Employee: ";
	cin >> nam;
	cin.ignore();
	cout << "Father Name: ";
	cin >> f_name;
	cout << "Employee ID: ";
	cin >> id;
	cout << "Date of Birth: ";
	//cin.ignore();
	cin >> dt;
	cout << "Basic Pay Scale: ";
	cin >> b;
	cout << "Job Type: ";
	cin.ignore();
	cin >> job;
}
void Employee::showRecord()
{
	cout << "Name: " << name << endl;
	cout << "Father Name: " << father_name << endl;
	cout << "Employee ID: " << emp_id << endl;
	cout << "Date of Birth: " << date << endl;
	cout << "Basic Pay Scale: " << bps << endl;
	cout << "Job Type: " << job_Type << endl;
}

int main()
{
	string nam, f_name, job, dt,
	int id, b;
	Employee A;
	A.setRecord(nam, f_name, id, dt, b, job);
	system("pause");
	return 0;
}

4 Ответов

Рейтинг:
2

Member 13817351

можете ли вы просмотреть мой код, чтобы сказать мне, что такое ошибка в моем коде.


Рейтинг:
1

Rick York

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


Рейтинг:
1

Member 13817351

@KarstenK, если я напишу его без передачи атрибутов, которые я создаю в main

int main()
{
	string name, father_name, job_type, date,
	int emp_id, bps;
	Employee A;
	A.setRecord(name, father_name, emp_id, date, bps, job_type);

тогда как я могу инициализировать его через список инициализаторов(перегруженный конструктор)

Спросите об этой части ответа:
void Employee::setRecord()
{
	cout << "Name of Employee: ";
	cin >> name;//correct, but some like more typing with "this->name" !!!


Wendelius

Используйте кнопку "Задать вопрос или комментарий", чтобы настроить таргетинг на конкретный ответ.

Richard MacCutchan

Метод setRecord не является конструктором. Но вы можете вызвать перегрузку точно так же, как вы вызываете любой конструктор:

// get the parameter values, then:
Employee A(name, father_name, emp_id, date, bps, job_type);

Рейтинг:
0

KarstenK

Оставить работника в дополнительных файлов, разделенных в заголовке (работник.h) и имплементация (employee.cpp) файлы. Это стандарт в кодировании, чтобы сделать это.

совет: в конструкторе по умолчанию вы ДОЛЖЕН также установите значения для элемента. Как это:

Employee():name(""), father_name(""), emp_id(0), bps(0), job_Type("") {} 

SetRecord ошибочен. Перепишите функцию с элементами объекта.
void Employee::setRecord()
{
	cout << "Name of Employee: ";
	cin >> name;//correct, but some like more typing with "this->name" !!!


Orjan Westin

Нет необходимости инициализировать строковые элементы - они уже являются "". Сказать, что они должны быть установлены, значит ввести в заблуждение.

Member 13817351

@Orjan Westin - это мой конструктор по умолчанию, это правильно.

Orjan Westin

Нет, целочисленные члены emp_id и bps должны быть инициализированы.