Search code examples
c++classconstructorderived-class

How to create derived class in c++


I'm confused on how to deal with inheritance in C++

I'd like to pass parameters on the constructor. But I only got run this when I create a class without parameters.

This small program:

#include <iostream>
using namespace std;

// Base class

class Shape { 
  protected:

  int width, height;

  public:

  Shape(int w, int h) {  
    width = w;
    height = h;
  }

  void setDimensions(int w, int h)  {
    width = w;
    height = h;
  }

};

// New class Rectangle based on Shape class

class Rectangle: public Shape {
  public:

    int getArea() {
      return (width * height);
    }

};

When compile I get the errors:

$ g++ inheritance.cpp -o inheritance -g -std=c++11
inheritance.cpp:44:13: error: no matching constructor for initialization of 'Rectangle'
  Rectangle r(3, 4)
            ^ ~~~~
inheritance.cpp:33:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
class Rectangle: public Shape {
      ^
inheritance.cpp:33:7: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided
inheritance.cpp:33:7: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided

Solution

  • Constructors aren't inherited from Shape. You'll need to provide a constructor for Rectangle, that can take this parameter signature:

    Rectangle(int w, int h) : Shape(w,h) { }