In C++, a default constructor is a constructor that can be called with no arguments. The compiler will implicitly define a default constructor for a class if:
For example:
class Player {
int health_;
std::string name_;
};
Player p1; // OK, implicit default constructor
However, if we define any constructor for the class, the compiler will no longer provide an implicit default constructor:
class Player {
public:
Player(int health) : health_{health} {}
private:
int health_;
std::string name_;
};
Player p1; // Error, no default constructor
Player p2{100}; // OK, using defined constructor
In this case, if we still want a default constructor, we need to define it explicitly:
class Player {
public:
Player() = default;
Player(int health) : health_{health} {}
private:
int health_;
std::string name_;
};
// OK, using defaulted default constructor
Player p1;
So remember: if you define any constructors for a class, and you want a default constructor, you need to define it explicitly (either by writing it or by using = default
).
Answers to questions are automatically generated and may not have been reviewed.
A crash tour on how we can create custom types in C++ using classes, structs and enums