devxlogo

Declaring an Object With No Default Constructor as a Member of Another Class

Declaring an Object With No Default Constructor as a Member of Another Class

Suppose you have a class called A, which doesn’t have a default constructor, and you want to embed an instance of this class as a member of another class, B:

   class A  {  public:    A (int n);   // no default constructor  };

When you instantiate an ordinary object of class A, you pass an argument to its constructor like this:

   A a(3); // OK

However, you can’t do that when declaring an instance of A as a member of another class:

   class B  {  public:    B();  private:    A a(3); // error  };

You should use a member-initialization list in the containing class’s constructor to pass the embedded object’s argument:

   class B  {  public:    B() : a(3) {} // pass argument to embedded object  private:    A a; // no argument here  };

Some classes have both a default constructor and a constructor that takes one or more arguments, (e.g., std::vector). With such classes, you should use a member-initialization list to invoke a constructor that takes arguments:

   class Document  {  private:    vector  vc; // no argument here  public:    Document() : vc(80){} // similar to vector  vc (80)  };

devx-admin

Share the Post: