constructors

how to do constructors with this . please help

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  #include <iostream>

#include <iomanip>

#include <string>

using namespace std;

class Employee

{

public:

Employee()//constructor with default setting
{
	name=name;
	rate=rate;
	hours= hours;
}

Employee(string name, double rate,double hours)
{ 
	name=name;
	rate=rate;
	hours= hours;
}
//parameterized constructor
bool setName(string name)
{

    if(name=="")

    return false;

    this->name = name;

return true;

}

bool setRate(double rate)
{

    if(rate<0)

    return false;

    this->rate = rate;

    return true;

}

bool setHours(double hours){

    if(hours<0)

return false;

    this->hours = hours;

return true;

}

double getPay(){

double pay = hours*rate;

    if(hours>40)

pay += (hours-40)*rate*0.5;

return pay;

}

double getHours(){

return hours;

}

double getRate(){

return rate;

}

string getName(){

return name;

}

private:

string name;

double hours;

double rate;

};

int main()

{

string name;

double hours, rate;

Employee *emp = new Employee;

char another;

do{

cout<<"Enter employee's name: ";

while(1){

getline(cin, name);

if(emp->setName(name))

break;

cout<<"Name cannot be blank, re-enter: ";

}

cout<<"Enter hours worked: ";

while(1)
{

    cin>>hours;

    if(emp->setHours(hours))

break;

cout<<"Hours must be positive. re-enter: ";

}

cout<<"Enter hourly rate: ";

while(1)
{

    cin>>rate;

    if(emp->setRate(rate))

break;

cout<<"Hourly rate must be positive, re-enter: ";

}

cout<<setprecision(2)<<fixed;

cout<<"\n\nGross pay for "<<emp->getName()<<": $"<<emp->getPay()<<endl<<endl;

cout<<"Another employee? (Y/N): ";

cin>>another;

//for buffering

getline(cin, name);

}
while(another!='Y' || another!='y');

cout<<"Press any key to continue";

cin>>another;

return 0;

}
1
2
3
4
5
6
Employee()//constructor with default setting
{
	name=name;
	rate=rate;
	hours= hours;
}


"Constructor with default setting" You need to put default values in for name, rate, and hours.
Perhaps:
1
2
3
name = "N/A";
rate = 0.0;
hours = 0.0;


1
2
3
4
5
6
Employee(string name, double rate,double hours)
{ 
	name=name;
	rate=rate;
	hours= hours;
}

name = name; is trying to assign your local variable to itself.
To prevent this, either do
this->name = name;

Or do an initializer list (preferred!)
https://en.cppreference.com/w/cpp/language/initializer_list

1
2
3
4
5
6
7
8
9
10
11
Employee()//constructor with default setting
: name("N/A"),
  rate(0.0),
  hours(0.0)
{ }

Employee(string name, double rate,double hours)
: name(name),
  rate(rate),
  hours(hours)
{ }


Last edited on
Hello poonamp6792,

Watch your indenting. The code is hard to read.

Nothing wrong with it, but you have extra blank lines thet you do not need.

What you are calling the default ctor is a good idea, but wrong. You have:

1
2
3
4
5
6
Employee()//constructor with default setting
{
	name=name;
	rate=rate;
	hours= hours;
}

Line 3 will not hurt anything you are setting an empty string equal to its self. But rate and hours have no value to begin with, so you are actually garbage equal to garbage since the variables have not value to start with.

What you want is this:
1
2
3
4
5
Employee()//constructor with default setting
{
	rate = 0.0; 
	hours = 0.0;
}

The string is empty to start with and does not need to be given an value unless you want to. "rate" and "hours" being "double"s do need to be given a value.

The overloaded ctor is half right it should be more like:
1
2
3
4
5
6
Employee(string name, double rate,double hours)
{ 
	m_name = name;
	m_rate = rate;
	m_hours = hours;
}

And the private variables of the class would start with "m_", which is what I see quite often, or you could change or do something different with the function parameters so that they are different from your private variable names. Sorry I had a brain freeze with what to do with the function parameters for the variables.

Hope that helps,

Andy
hi guys , i finished it.

does this look good? i still need to work with indenting

******** Poonam Patel *******/
/* This program calculate the employee's gross pay with overtime hours worked as well */
#include <iostream>

#include <iomanip>

#include <string>

using namespace std;

class Employee

{

public:

Employee()//constructor with default setting
{

m_rate=0.0;
m_hours= 0.0;
}

Employee(string name, double rate,double hours)
{
m_name = name;
m_rate = rate;
m_hours = hours;
}

public://parameterized constructor
bool setName(string name)
{

if(name=="")

return false;

this->m_name = name;

return true;

}

bool setRate(double rate)
{

if(rate<0)

return false;

this->m_rate = rate;

return true;

}

bool setHours(double hours){

if(hours<0)

return false;

this->m_hours =hours;

return true;

}

double getPay(){

double pay = m_hours*m_rate;

if(m_hours>40)

pay += (m_hours-40)*m_rate*0.5;

return pay;

}

double getHours(){

return m_hours;

}

double getRate(){

return m_rate;

}

string getName(){

return m_name;

}

private:

string m_name;

double m_hours;

double m_rate;

};

int main()

{

string name;

double hours, rate;

Employee *emp = new Employee;

char another;

do{

cout<<"Enter employee's name: ";

while(1){

getline(cin, name);

if(emp->setName(name))

break;

cout<<"Name cannot be blank, re-enter: ";

}

cout<<"Enter hours worked: ";

while(1)
{

cin>>hours;

if(emp->setHours(hours))

break;

cout<<"Hours must be positive. re-enter: ";

}

cout<<"Enter hourly rate: ";

while(1)
{

cin>>rate;

if(emp->setRate(rate))

break;

cout<<"Hourly rate must be positive, re-enter: ";

}

cout<<setprecision(2)<<fixed;

cout<<"\n\nGross pay for "<<emp->getName()<<": $"<<emp->getPay()<<endl<<endl;

cout<<"Another employee? (Y/N): ";

cin>>another;

//for buffering

getline(cin, name);

}
while(another!='Y' || another!='y');

cout<<"Press any key to continue";

cin>>another;

return 0;

}
Topic archived. No new replies allowed.