Правила программирования на С и С++. Главы 7-8 Страница 13. Пользуйтесь контрольными таблицами
|
Страница 13 из 74 93. Пользуйтесь контрольными таблицами.
Одной из причин того, что С++ имеет такую крутую кривую обучения, заключается в том, что вы должны отслеживать большое количество маленьких деталей, чтобы выполнить даже простые задачи. Просто забыть что-то, даже если вы это сделаете не надолго. Я решаю эту проблему, применяя повсюду несколько образцовых шаблонных файлов - по одному для каждой распространенной ситуации. (У меня есть один для определения базового класса, один - для определения производного класса, и т.д.). Я начинаю с копирования соответствующего шаблона в свой текущий рабочий файл и затем использую возможности своего редактора по поиску и замене для заполнения пустот. Я также перемещаю подходящие функции в файлы .cpp, когда нужно, и т.п.. Листинги 5 и 6 показывают простые шаблонные (в смысле естественного языка, а не языка С++) файлы для базового и производного классов (где кое-что опущено по сравнению с теми, которыми я пользуюсь на самом деле, но идею вы поняли). Листинг 5. base.tem - контрольная таблица для определения базового класса. - class base
- {
- cls obj;
- public:
- virtual
- ~base ( void );
- base ( void );
- base ( const base ?r );
- const base ?operator=( const base ?r );
- private:
- };
- //-------------------------------------------------------------------------------------------------------------------
- /* виртуальный */ ~base::base( void )
- {
- }
- //-------------------------------------------------------------------------------------------------------------------
- inline base::base( void ) : obj( value )
- {
- }
- //-------------------------------------------------------------------------------------------------------------------
- inline base::base( const base ?r ) : obj( r.obj )
- {}
- //-------------------------------------------------------------------------------------------------------------------
- inline const ?base::operator=( const base ?r )
- {
- if( this != ?r )
- {
- obj = r.obj;
- }
- return *this;
- }
Листинг 6. derived.tem - контрольная таблица для определения производного класса. - class derived : public base
- {
- cls obj;
- public:
- virtual
- ~derived ( void );
- derived ( void );
- derived ( const base ?r );
- const derived ?operator=( const derived ?r );
- private:
- };
- //-------------------------------------------------------------------------------------------------------------------
- /* виртуальный */ ~derived::derived( void )
- {
- }
- //-------------------------------------------------------------------------------------------------------------------
- inline derived::derived( void ) : base( value ) ,
- obj( value )
- {
- }
- //-------------------------------------------------------------------------------------------------------------------
- inline derived::derived( const derived ?r ) : base ( r )
- , obj( r.obj )
- {}
- //-------------------------------------------------------------------------------------------------------------------
- inline const ?derived::operator=( const derived ?r )
- {
- if( this != ?r )
- {
- *((base *)this) = r;
- obj = r.obj;
- }
- return *this;
- }
|