Inheritance Problem Issue - getting a null return

The problem I am working on is the following:

Design a class named Employee. The class should keep the following information:
 name (s string)
 id number (a string)
 salary (a double)
 default constructor
 a constructor with 3 parameters for the 3 attributes
 get and set methods for the three attributes
Next, write a class named ProductionWorker that is derived from the Employee class. The
ProductionWorker class should have member variables to hold the following information:
 shift (an integer)
 hours (an integer)
 hourly pay rate (a double)
 default constructor
 constructor with parameters for all attributes
 get and set methods
The workday is divided into two shifts: day and night. The shift variable will hold an integer
value representing the shift that the employee works. The day shift is shift 1, and the night shift
is shift 2. The salary is calculated as hourly pay rate * hours per week.
Write a class named ShiftAdvisor. A shift supervisor is a salaried employee who supervises a
shift. In addition to a salary, the shift supervisor earns a monthly bonus when his or her shift
meets production goals. Design a ShiftSupervisor class that is derived from the Employee class.
The salary is calculated by salary plus the bonus. The ShiftSupervisor class should have the
following information:
 bonus (a double)
 default constructor
 constructor with parameters for all attributes
 get and set methods
Demonstrate the classes by writing a program (Lab10.cpp) that create one ProductionWorker
object and one ShiftAdvisor object using the constructors with parameters. And display the
object information

I made my header to look like this
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
#ifndef lab10_h
#define lab10_h

#include <cstring>
#include <string>
#include <iostream>
using namespace std;

class Employee
{
protected:
    string name;
    string eid;
    double salary;
public:
    
    //Default Constructor
    Employee()
    {
        name = nullptr;
        eid = nullptr;
        salary = NULL;
    }
    //Parameteized Constructor
    Employee(string n, string nid, double sal)
    {
        name = n;
        eid = nid;
        salary = sal;
        
    }
    //Set method for name
    void setName(string n)
    { name = n;}
    
    //Set method for employee id
    void setEid(string nid)
    { eid = nid;}
    
    //Set method for salary
    void setSalary(double s)
    { salary = s;}
    
    //Get method for name
    string getName() const
    {return name;}
    
    //Get method for employee id
    string getId() const
    { return eid;}
    
    //Get method for salary
    double getSalary() const
    { return salary;}
};

class ProductionWorker : public Employee
{
private:
    int shift;
    int hours;
    double hourlyPayRate;
    
public:
    
    //Default Constructor
    ProductionWorker()
    {
        shift = NULL;
        hours = NULL;
        hourlyPayRate = NULL;
    }
    //Parameteized Constructor
    ProductionWorker(string n, string id, int s, int h, double hpr)
    {
        name = n;
        eid = id;
        salary = h * hpr;
        shift = s;
        hours = h;
        hourlyPayRate = hpr;
    }
    //Set method for salary
    void setSalary(int h, double hpr)
    { salary = h * hpr;}
    
    //Set method for shift
    void setShift(int s)
    { shift = s;}
    
    //Set method for hours
    void setHours(int h)
    { hours = h;}
    
    //Set method for hourly pay rate
    void setHourlyPayRate(int hpr)
    { hourlyPayRate = hpr;}
    
    //Get method for shift
    int getShift() const
    {return shift;}
    
    //Get method for hours
    int getHours() const
    {return hours;}
    
    //Get method for hourly pay rate
    int getHourlyPayRate() const
    {return hourlyPayRate;}
};

class ShiftSupervisor : public Employee
{
private:
    double bonus;
public:
    
    //Default Constructor
    ShiftSupervisor()
    {
        bonus = NULL;
    }
    
    //Parameteized Constructor
    ShiftSupervisor(string n, string nid, double s, double b)
    {
        bonus = b;
        salary = b + s;
    }
    
    //set method for salary
    void setSalary(double b, double s)
    {
        salary = b + s;
    }
    
    //set method for bonus
    void setBonus(double b)
    {bonus = b;}
    
    //get method for bonus
    double getBonus() const
    {return bonus;}
};

#endif /* lab10_h */ 


and my main looks as follows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "lab10.h"
#include <iostream>
#include <string>
#include <cstring>
using namespace std;


int main()
{
    ProductionWorker pw1("John","e222", 1, 35, 7.25);
    cout << "\nName: " << pw1.getName() << "\nID: " << pw1.getId() << "\nSalary: " << pw1.getSalary() <<  "\nShift: " << pw1.getShift() << endl;
    ShiftSupervisor ss1("Bob", "s222", 60000, 500);
    cout << "\nName: " << ss1.getName() << "\nID: " << ss1.getId() << "\nSalary: " << ss1.getSalary() << endl;
    return 0;
}


When I compile the program all works swimmingly, however, when I run the program I get an error that reads "Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)" which I think is due to a NULL being returned somewhere but I am not sure where. All help is appreciated!! Thank you!
Last edited on
I figured it out, here is my new code

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
#ifndef lab10_h
#define lab10_h

#include <cstring>
#include <string>
#include <iostream>
using namespace std;

class Employee
{
protected:
    string name;
    string eid;
    double salary;
public:
    
    //Default Constructor
    Employee()
    {
        name = nullptr;
        eid = nullptr;
        salary = NULL;
    }
    //Parameteized Constructor
    Employee(string n, string nid, double sal)
    {
        name = n;
        eid = nid;
        salary = sal;
        
    }
    //Set method for name
    void setName(string n)
    { name = n;}
    
    //Set method for employee id
    void setEid(string nid)
    { eid = nid;}
    
    //Set method for salary
    void setSalary(double s)
    { salary = s;}
    
    //Get method for name
    string getName() const
    {return name;}
    
    //Get method for employee id
    string getId() const
    { return eid;}
    
    //Get method for salary
    double getSalary() const
    { return salary;}
};

class ProductionWorker : public Employee
{
private:
    int shift;
    int hours;
    double hourlyPayRate;
    
public:
    
    //Default Constructor
    ProductionWorker() : Employee ()
    {
        shift = NULL;
        hours = NULL;
        hourlyPayRate = NULL;
    }
    //Parameteized Constructor
    ProductionWorker(string n, string nid, double sal, int s, int h, double hpr) : Employee (n, nid, sal)
    {
        salary = h * hpr;
        shift = s;
        hours = h;
        hourlyPayRate = hpr;
    }
    //Set method for salary
    void setSalary(int h, double hpr)
    { salary = h * hpr;}
    
    //Set method for shift
    void setShift(int s)
    { shift = s;}
    
    //Set method for hours
    void setHours(int h)
    { hours = h;}
    
    //Set method for hourly pay rate
    void setHourlyPayRate(int hpr)
    { hourlyPayRate = hpr;}
    
    //Get method for shift
    string getShift() const
    {
        if( shift == 1)
            return "Day";
        if(shift == 2)
            return "Night";
        else
            return "Assign shift time";
    }
    
    //Get method for hours
    int getHours() const
    {return hours;}
    
    //Get method for hourly pay rate
    int getHourlyPayRate() const
    {return hourlyPayRate;}
};

class ShiftSupervisor : public Employee
{
private:
    double bonus;
public:
    
    //Default Constructor
    ShiftSupervisor()
    {
        bonus = NULL;
    }
    
    //Parameteized Constructor
    ShiftSupervisor(string n, string nid, double sal, double b) : Employee (n, nid, sal)
    {
        bonus = b;
        salary = b + sal;
    }
    
    //set method for salary
    void setSalary(double b, double sal)
    {
        salary = b + sal;
    }
    
    //set method for bonus
    void setBonus(double b)
    {bonus = b;}
    
    //get method for bonus
    double getBonus() const
    {return bonus;}
};

#endif /* lab10_h */ 


and the main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "lab10.h"
#include <iostream>
#include <string>
#include <cstring>
using namespace std;


int main()
{
    ProductionWorker pw1("John","e222", 5000, 1, 35, 7.25);
        cout << "\nName: " << pw1.getName() << "\nID: " << pw1.getId() << "\nSalary: " << pw1.getSalary() <<  "\nShift: " << pw1.getShift() << endl;
    ShiftSupervisor ss1("Bob", "s222", 60000, 500);
    cout << "\nName: " << ss1.getName() << "\nID: " << ss1.getId() << "\nSalary: " << ss1.getSalary() << endl;
    return 0;
}
Topic archived. No new replies allowed.