Почленная инициализация A
Инициализация одного объекта класса другим объектом того же класса, как, например:
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; |
}
Почленная инициализация одного объекта класса другим встречается в следующих ситуациях:
· явная инициализация одного объекта другим:
Account newAcct( oldAcct );
· передача объекта класса в качестве аргумента функции:
extern bool cash_on_hand( Account acct ); if ( cash_on_hand( oldAcct )) |
// ...
· передача объекта класса в качестве возвращаемого функцией значения:
extern Account consolidate_accts( const vector< Account >& ) { Account final_acct; // выполнить финансовую операцию return final_acct; |
}
· определение непустого последовательного контейнера:
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий