Правила программирования на Си и Си++

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


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

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

class base

{

    cls obj;

public:

    virtual

       ~base ( void );

        base ( void );

        base ( const base r );

/p>

    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 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 derived r );
ааа const derived operator=( const derived r );

private:
};
//------------------------------------------------------
/* тшЁЄєры№эvщ */ 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 derived::operator=( const derived r )
{
ааа if( this != r )
ааа {
ааааааа *((base *)this) = r;
аааааа obj = r.obj;
ааа }
ааа return *this;
}

Содержание раздела