Мониторинг обменных курсов валют
18c0693f

Почленная инициализация *


Инициализация одного объекта класса другим объектом того же класса, как, например:

Account oldAcct( "Anna Livia Plurabelle" );

Account newAcct( oldAcct );

называется почленной инициализацией по умолчанию. По умолчанию – потому, что она производится автоматически, независимо от того, есть явный конструктор или нет. Почленной – потому, что единицей инициализации является отдельный нестатический член, а не побитовая копия всего объекта класса.

Такую инициализацию проще всего представить, если считать, что компилятор создает специальный внутренний копирующий конструктор, где поочередно, в порядке объявления, инициализируются все нестатические члены. Если рассмотреть первое определение нашего класса Account:

class Account {

public:

   // ...

private:

   char         *_name;

   unsigned int _acct_nmbr;

   double       _balance;

};

то можно представить, что копирующий конструктор по умолчанию определен так:

inline Account::

Account( const Account &rhs )

{

   _name = rhs._name;

   _acct_nmbr = rhs._acct_nmbr;

   _balance = rhs._balance;

}

Почленная инициализация одного объекта класса другим встречается в следующих ситуациях: