Re[5]: нуждаюсь в помощи, помогите, пожалуйста
От: KHeLeKRoN Россия  
Дата: 01.04.05 11:46
Оценка:
Звиняй, не увидел, что это конструктор... Но, в конструкторе их надо ИНИЦИАЛИЗИРОВАТЬ (присваивать значения, в этом духе). А в описании класса их надо объявлять. Вот реальный тебе пример, сейчас над ним работаю.
Длинноват, но ничего.

typedef void (*typeSortFuncPointer)    (int* arr, const int size);
typedef void (*typeFillFuncPointer)    (int* arr, const int size, int n);

#include "JournalItem.h"
#include "LogItem.h"
class CBencher
{
protected:
    unsigned int        myNTries_;
    int            myLastPrecision_;
    unsigned long long int*    myAverageIterationsArray_;
    unsigned long long int*    myAverageSwapsArray_;
    unsigned int*        myMaxIterationsArray_;
    unsigned int*        myMaxSwapsArray_;
    unsigned int*        myMinIterationsArray_;
    unsigned int*        myMinSwapsArray_;
    unsigned int        mySwaps_;
    unsigned int        myIterations_;
    CJournalItem*        myJournal_;
    int            myCurrentJournalSize_;
    int            myMaxJournalSize_;
    CLogItem*        myLog_;
    int            myCurrentLogSize_;
    int            myMaxLogSize_;
    
    typeFillFuncPointer    myFillFunction_;
    typeSortFuncPointer    mySortFunction_;

    void eraseArrays (void);
public:
    CBencher (void);
    typeSortFuncPointer        setSortFunction     (typeSortFuncPointer p);
    typeFillFuncPointer        setFillFunction     (typeFillFuncPointer p);
    void                bench             (const int maxsize, const int numGradations, const int precision);
    const unsigned long long int*    getAverageSwaps        (void)                        const;
    const unsigned long long int*    getAverageIterations    (void)                        const;
    const unsigned int*        getMaxSwaps        (void)                        const;
    const unsigned int*        getMaxIterations    (void)                        const;
    const unsigned int*        getMinSwaps        (void)                        const;
    const unsigned int*        getMinIterations    (void)                        const;
    CJournalItem&            getJournalItem        (const unsigned int nTr)            const;
    CLogItem&            getLogItem        (const unsigned int nTr)            const;
    inline void            increaseSwaps ()    { mySwaps_++; }
    inline void            increaseIterations ()    { myIterations_++; }
    virtual                ~CBencher (void);
};
CBencher currentBencher;

#include "Strng.h"
#include "ArrFillers.h"

CBencher :: CBencher ()
{
    myMaxLogSize_ = myCurrentLogSize_ = myMaxJournalSize_ = myCurrentJournalSize_ = 0;
    myLog_                = new CLogItem [0];
    myJournal_            = new CJournalItem [0];
    myNTries_            = 0;
    myLastPrecision_        = 0;
    mySortFunction_            = CK :: optimizedBInsertSort;
    myFillFunction_            = randomFill;
    myAverageIterationsArray_    = NULL;
    myAverageSwapsArray_        = NULL;
    myMaxIterationsArray_        = NULL;
    myMaxSwapsArray_        = NULL;
    myMinIterationsArray_        = NULL;
    myMinSwapsArray_        = NULL;
    mySwaps_            = 0;
    myIterations_            = 0;
}

CBencher :: ~CBencher ()
{
    eraseArrays ();
}

inline void CBencher :: eraseArrays ()
{
    delete [] myAverageIterationsArray_;
    delete [] myAverageSwapsArray_;
    delete [] myMaxIterationsArray_;
    delete [] myMaxSwapsArray_;
    delete [] myMinIterationsArray_;
    delete [] myMinSwapsArray_;
}

inline typeFillFuncPointer CBencher :: setFillFunction (typeFillFuncPointer p)
{
    typeFillFuncPointer t = myFillFunction_;
    myFillFunction_ = p;
    return t;
}

inline typeSortFuncPointer CBencher :: setSortFunction (typeSortFuncPointer p)
{
    typeSortFuncPointer t = mySortFunction_;
    mySortFunction_ = p;
    return t;
}

void CBencher :: bench (const int maxsize, const int numGradations, const int precision)
{
    srand (static_cast<unsigned int>(time (NULL)));
    if (!numGradations) throw "CBencher::bench (): Second parameter is zero.";
    int mn = maxsize/numGradations;
    int* arrayForSadizm = new int [maxsize];

    eraseArrays ();

    myAverageIterationsArray_    = new unsigned long long int [numGradations];
    myAverageSwapsArray_        = new unsigned long long int [numGradations];
    myMaxIterationsArray_        = new unsigned int [numGradations];
    myMaxSwapsArray_        = new unsigned int [numGradations];
    myMinIterationsArray_        = new unsigned int [numGradations];
    myMinSwapsArray_        = new unsigned int [numGradations];
    
    myFillFunction_ (arrayForSadizm, maxsize, 0);

    for (int i = 0, currentSize = mn; i < numGradations; i++, currentSize += mn)
    {
        myMaxSwapsArray_ [i] = myMaxIterationsArray_ [i] = 0;
        myMinSwapsArray_ [i] = myMinIterationsArray_ [i] = 32500;
        myAverageIterationsArray_ [i] = myAverageSwapsArray_ [i] = 0;
        for (int j = 0; j <    precision; j++)
        {
            mySortFunction_ (arrayForSadizm, currentSize);
            cout << ".";
            myFillFunction_ (arrayForSadizm, maxsize, 0);
            cout << ".";
            myAverageIterationsArray_ [i]    += myIterations_;
            myAverageSwapsArray_ [i]    += mySwaps_;

            myMaxSwapsArray_ [i]        > mySwaps_    ? NULL : myMaxSwapsArray_ [i]        = mySwaps_;
            myMaxIterationsArray_ [i]    > myIterations_ ? NULL : myMaxIterationsArray_ [i] = myIterations_;

            myMinSwapsArray_ [i]        < mySwaps_    ? NULL : myMinSwapsArray_ [i]        = mySwaps_;
            myMinIterationsArray_ [i]    < myIterations_ ? NULL : myMinIterationsArray_ [i] = myIterations_;
            
            mySwaps_ = myIterations_ = 0;
        }
        myAverageIterationsArray_ [i]    /= precision;
        myAverageSwapsArray_ [i]    /= precision;
    }
    if (myMaxLogSize_ == myNTries_)
    {
        CLogItem* buf = new CLogItem [myCurrentLogSize_];
        for (int i = 0; i < myCurrentLogSize_; i++)
            buf [i] = myLog_ [i];
        delete [] myLog_;
        myMaxLogSize_ = myCurrentLogSize_ + myCurrentLogSize_;
        myLog_ = new CLogItem [myMaxLogSize_];
        for (int i = 0; i < myCurrentLogSize_; i++)
            myLog_ [i] = buf [i];
        delete [] buf;
    }
    CLogItem tObject (myAverageSwapsArray_,    myAverageIterationsArray_,
                      myMinSwapsArray_,        myMinIterationsArray_,
                      myMaxSwapsArray_,        myMaxIterationsArray_,
                      numGradations);
    myLog_ [myCurrentLogSize_++] = tObject;
    cout << endl;
    delete [] arrayForSadizm;
    myLastPrecision_ = precision;
    myNTries_++;
}

inline const unsigned long long int* CBencher :: getAverageSwaps () const
{
    if (!myAverageSwapsArray_) throw "CBencher::getAverageSwaps (): Return of null pointer. Possible error.";
    return myAverageSwapsArray_;
}

inline const unsigned long long int* CBencher :: getAverageIterations () const
{
    if (!myAverageIterationsArray_) throw "CBencher::getAverageIterations (): Return of null pointer. Possible error.";
    return myAverageIterationsArray_;
}

inline const unsigned int* CBencher :: getMaxSwaps (void) const
{
    if (!myMaxSwapsArray_) throw "CBencher::getMaxSwaps (): Return of null pointer. Possible error.";
    return myMaxSwapsArray_;
}

inline const unsigned int* CBencher :: getMaxIterations (void) const
{
    if (!myMaxIterationsArray_) throw "CBencher::getMaxIterations (): Return of null pointer. Possible error.";
    return myMaxIterationsArray_;
}

inline const unsigned int* CBencher :: getMinSwaps (void) const
{
    if (!myMinSwapsArray_) throw "CBencher::getMinSwaps (): Return of null pointer. Possible error.";
    return myMinSwapsArray_;
}

inline const unsigned int* CBencher :: getMinIterations (void) const
{
    if (!myMinIterationsArray_) throw "CBencher::getMinIterations (): Return of null pointer. Possible error.";
    return myMinIterationsArray_;
}

inline CJournalItem& CBencher :: getJournalItem (const unsigned int nTry) const
{
    if (nTry > myNTries_) throw "CBnecher::getJournalItem (): Index out of bounds.";
    static CJournalItem tObject = myJournal_ [nTry];
    return tObject;
}

inline CLogItem& CBencher :: getLogItem (const unsigned int nTry) const
{
    if (nTry > myNTries_) throw "CBencehr::getLogItem (): Index out of bounds.";
    static CLogItem tObject = myLog_ [nTry];
    return tObject;
}


Понял?
And solder won't keep me together (c)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.