Правила программирования на С и С++. Главы 7-8
Страница 13. Пользуйтесь контрольными таблицами


 

93. Пользуйтесь контрольными таблицами.

Одной из причин того, что С++ имеет такую крутую кривую обучения, заключается в том, что вы должны отслеживать большое количество маленьких деталей, чтобы выполнить даже простые задачи. Просто забыть что-то, даже если вы это сделаете не надолго. Я решаю эту проблему, применяя повсюду несколько образцовых шаблонных файлов - по одному для каждой распространенной ситуации. (У меня есть один для определения базового класса, один - для определения производного класса, и т.д.). Я начинаю с копирования соответствующего шаблона в свой текущий рабочий файл и затем использую возможности своего редактора по поиску и замене для заполнения пустот. Я также перемещаю подходящие функции в файлы .cpp, когда нужно, и т.п.. Листинги 5 и 6 показывают простые шаблонные (в смысле естественного языка, а не языка С++) файлы для базового и производного классов (где кое-что опущено по сравнению с теми, которыми я пользуюсь на самом деле, но идею вы поняли).

Листинг 5. base.tem - контрольная таблица для определения базового класса.

  1. class base
  2. {
  3. cls obj;
  4. public:
  5. virtual
  6. ~base ( void );
  7. base ( void );
  8. base ( const base ?r );
  9. const base ?operator=( const base ?r );
  10. private:
  11. };
  12. //-------------------------------------------------------------------------------------------------------------------
  13. /* виртуальный */ ~base::base( void )
  14. {
  15. }
  16. //-------------------------------------------------------------------------------------------------------------------
  17. inline base::base( void ) : obj( value )
  18. {
  19. }
  20. //-------------------------------------------------------------------------------------------------------------------
  21. inline base::base( const base ?r ) : obj( r.obj )
  22. {}
  23. //-------------------------------------------------------------------------------------------------------------------
  24. inline const ?base::operator=( const base ?r )
  25. {
  26. if( this != ?r )
  27. {
  28. obj = r.obj;
  29. }
  30. return *this;
  31. }

     

Листинг 6. derived.tem - контрольная таблица для определения производного класса.
  1. class derived : public base
  2. {
  3. cls obj;
  4. public:
  5. virtual
  6. ~derived ( void );
  7. derived ( void );
  8. derived ( const base ?r );
  9. const derived ?operator=( const derived ?r );
  10. private:
  11. };
  12. //-------------------------------------------------------------------------------------------------------------------
  13. /* виртуальный */ ~derived::derived( void )
  14. {
  15. }
  16. //-------------------------------------------------------------------------------------------------------------------
  17. inline derived::derived( void ) : base( value ) ,
  18. obj( value )
  19. {
  20. }
  21. //-------------------------------------------------------------------------------------------------------------------
  22. inline derived::derived( const derived ?r ) : base ( r )
  23. , obj( r.obj )
  24. {}
  25. //-------------------------------------------------------------------------------------------------------------------
  26. inline const ?derived::operator=( const derived ?r )
  27. {
  28. if( this != ?r )
  29. {
  30. *((base *)this) = r;
  31. obj = r.obj;
  32. }
  33. return *this;
  34. }

 
« Предыдущая статья   Следующая статья »