简体   繁体   中英

C++ , Default constructor

When a constructor in a superclass receives arguments, it is no longer a default constructor, right? For example

class a {
    public:
      int a;
      int b;
      a(int c, int d){
        cout<<"hello";
      };
} 

Now when I try to make a subclass, the program causes an error, it says "no default constructor is defined in the super class". How can I solve this problem? I know that if I remove the arguments, everything is going to be fine but I'm told not to do so in my C++ test. Please help me figure it out.

If your base class isn't default-constructible, or if you don't want to use the base class's default constructor, then you simply have to tell the derived class how to construct the base subobject:

struct b : a
{
    b(int n) : a(n, 2*n) { }
    //         ^^^^^^^^^ <--  base class initializer, calls desired constructor
};

You have to provide a constructor which takes no argument yourself.

a::a()
{

}

Once you provide any constructor for your class the compiler does not generate the implicit default constructor which takes no arguments. So if your code then needs a no arguments constructor you will have to provide it yourself.

You normally deal with this with an initializer list:

#include <iostream>

class a { 
public:
    a(int c, int d) { std::cout << c << " " << d << "\n"; }
};

class b : public a { 
public:
    b() : a(1, 2) {}
};

int main() { 
    b x;
    return 0;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM