I am trying to use inheritance and would like the derived class (employee) to be created using the base class (person) constructor which has parameters. This doesn't complie and I get error C2661: 'employee::employee' : no overloaded function takes 2 parameters Error executing cl.exe. If I use the default constructor then other member functions from the base class behave as I would expect (print). Are constructors a special case, or have I missed something ?
Code:
//person.h
#include <string>
using namespace std;
class person
{
public:
person(); //default constructor
person(string n, int a);
~person();
void set_name(string n);
void have_birthday();
void print();
private:
int age;
string name;
};
class employee : public person
{
public:
~employee();
void set_employee_number(int e);
int get_employee_number();
private:
int employee_number;
};
//person.cpp
#include <iostream>
#include "person.h"
//person
person::person()
:name("No Name"),age(0)
{
cout << "person default constructor" << endl;
}
person::person(string n, int a)
:name(n),age(a)
{
cout << "person constructor: " << name << endl;
}
person::~person()
{
cout << "person destructor:" << name << endl;
}
void person::set_name(string n)
{
cout << name << " changed to " << n << endl;
name = n;
}
void person::have_birthday()
{
cout << "Happy Birthday " << name << endl;
age++;
}
void person::print()
{
cout << name << " is " << age << endl;
}
//employee
employee::~employee()
{
cout << "Employee destructor" << endl;
}
void employee::set_employee_number(int e)
{
employee_number = e;
}
int employee::get_employee_number()
{
return(employee_number);
}
//test.cpp
#include <iostream>
#include <string>
using namespace std;
#include "person.h"
int main()
{
person me;
//me.print();
me.set_name("Dave");
me.have_birthday();
me.print();
person you("Karen",28);
you.have_birthday();
you.print();
//employee worker;
//worker.set_name("Worker");
employee worker("Worker",30); //no overloaded function takes 2 parameters
worker.print();
worker.set_employee_number(123);
cout << "Employee Number" << worker.get_employee_number() << endl;
return 0;
}