Не совсем. Он сообщает конструктору базового класса, что делать. Представьте себе этот класс:
class A
{
public:
A(int val)
: value(val)
{
}
protected:
int value;
};
Чтобы построить A
, вы должны передать int. Это всегда так, даже если вы унаследовали это.
Скажем, вы класс B
, который происходит от A
. Вы являетесь и A
, но вы все еще должны сказать A
части вашего класса, как создать себя:
class B : public A
{
public:
B()
: A(5)
{
}
int GetValue()
{
return value;
}
};
Члены A
становятся вашими членами, потому что вы и A
.
В машинной памяти сценарий такой же, как вы описали, но только в простых случаях. Это становится более сложным с виртуальными функциями, множественным наследованием и виртуальным наследованием. Если вы придерживаетесь отношений is-a
и has-a
, то можете избежать некоторых головных болей:)