The C++ standard has this to say about dynamic initialisation:
"Objects with static storage duration shall be zero-initialised before any other initialisation takes place. Zero-initialisation and initialisation with a constant expression are collectively called static initialisation; all other initialisation is dynamic initialisation."
Chat with our AI personalities
In C++, overriding and function, method, or operator is a different thing than (dynamic) polymorphism, so overriding a polymorphic method is almost entirely possible.
When you assign a value to a variable that already exists, then it is always considered an assignment, otherwise it is considered an initialisation. The main difference is that an initialisation must instantiate a resource to hold the value, whereas the resource already exists with an assignment. In some cases (especially with badly-designed objects), initialisation may in fact be a two-stage process where, behind the scenes, the resource is first instantiated in an uninitialised or default state before being assigned a value through an assignment operator. C, for instance, always uses a two-stage initialisation whereas C++ can use a one-stage initialisation which is more efficient.
Class initialisation is normally handled by the class constructor(s). Every constructor has an optional initialisation section between the declaration and the body of the constructor. This is generally used to call specific base class constructors, but can be used to initialise any member variables via their own constructors. Member variables may alternatively be initialised in the body of the constructor, but this is really only necessary when member pointers need to be allocated new memory. For those classes that have many members and many constructors, the initialisation may be handled by a private member method called by each constructor in order to simplify maintenance during development. However, when the class is finalised, the private member method will generally be replaced with formal initialisation sections in each constructor.
There is no difference, other than that declarations in C++ can also initialise the variable in a single instruction. C example: int x; // declaration x=5; // initialisation C++ example: int y=5; // declaration and initialisation combined.
Separators include commas, colons, semi-colons and white-space. Semi-colons are used to indicate the end of a code block or to separate one function from the next. Commas are used to separate function arguments, or to separate structure variables and class member initialisation lists (comma-separated lists). Colons are mainly used to signify class inheritance and the start of class initialisation segments. White-space separates a variable type from its name, but is also used to aid the readability of code.