Calling Specific Base constructors
Sometimes when you write a constructor, you would like to pass some of the parameters to a base constructor.
Example:
class Person {
private:
Date *birthday;
public:
Person(Date *bd);
};
class Student : public Student {
private:
School *attends;
public:
Student(Date *birth, School *sch);
};
In this case, the "bd" parameter for the school constructor could just be passed on to the parent constructor. And we can do that by calling the parent constructor:
Student::Student(Date *birth, School *sch) : Person(birth) {
this->school = sch;
}
Pros and Cons:
Works only if we can put the parameters for the superconstructor within one expression
You don't have to provide a default constructor in your superclass
You can keep your attribute private
Note: If you're in multiple inheritance, you can call multiple superconstructors by separating them with a comma. E.g. : Person(birth), OtherConstructor(params).
Practice: Assume these two given class definitions. Implement both constructors, with one calling its superconstructor.
class Computer
{
private:
int cpuSpeed;
public:
Computer(int cpuSpeed);
};
class Laptop : public Computer
{
private:
int batteryLife;
public:
Laptop(int cpuSpeed, int batteryLife);
};
Computer::Computer(int cpuSpeed)
{
this->cpuSpeed = cpuSpeed;
}
Laptop::Laptop(int cpuSpeed, int bl) : Computer(cpuSpeed)
{
batteryLife = bl;
}