Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доработка программы на С++, Все про многочлен... Срочно... 
V
    Опции темы
Pakshin A. S.
Дата 18.5.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Есть прога:
Код

#include "iostream"
#include "fstream"
#include "locale"

using namespace std;

// Класс для хранения многочлена и примитивной работы с ним
class CMainData
{
private:
    int n;
    int *koff;
public:
    CMainData();
    void SetN(int _n);
    void SetKoff(int *_koff);
    friend class CUser;
    friend class CPolynomial;
};

CMainData::CMainData()
{
    n = 0;
}

void CMainData::SetN(int _n)
{
    n = _n;
    koff = new int (n);

    int *buf = koff;

    for (int i = 0; i < n; *buf=0, buf++, i++);
}

void CMainData::SetKoff(int *_koff)
{
    int *buf = koff;

    for (int i = 0; i <= n; *koff = *_koff, *_koff++, *koff++, i++);
    koff=buf;
}


// Класс пользовательских примитивных возможностей
class CUser: public CMainData
{
private:
    int Degree(int n, int x);
public:
    void ShowData();
    void GetData();
    int ResultIn(int x);
};

int CUser::Degree(int n, int x)
{
    int i;
    int buf = x;
    
    for (i = 2; i <= n; buf *= x, i++);

    buf = (n != 0)?buf:1;

    return buf;
}

int CUser::ResultIn(int x)
{
    int res = 0;

    for (int i = 0; i <= n; i++)
        res += koff[i] * Degree(n - i, x);

    return res;
}

void CUser::ShowData()
{
    wcout << endl << L"Многочлен: " << endl;
    
    int m=n;
    int *buf = koff;
    bool b = false;

    
    cout << *koff;
    system("PAUSE");

    for (int i = 0; i <= n; i++)
    {
        if (*koff != 0)
        {
            m = m-i;
            if (*koff < 0) 
                cout << "-";
            else 
                if (b == true)
                    cout << "+";
            if ((abs(*koff) != 1) || (m == 0))
                cout << abs(*koff);
            if (m >= 1)
                cout << "x";
            if (m > 1)
                cout << "^" << m;
            b = true;
        }
        koff++;
    }
    if (b == false)
        cout << "0";
    koff=buf;
    cout << endl << endl;
}

void CUser::GetData()
{
    int _n;

    wcout << L"Введите степень многочлена -> ";
    cin >> _n;
    SetN(_n);

    int *buf, *b;
    buf = new int (n);
    b = buf;

    for (int i = 0; i <= n; i++)
    {
        wcout << L"Введите коэффициент " << i << L" -> ";
        cin >> *buf;
        if (i < n)
            buf++;
    }
    buf=b;
    SetKoff(b);
}

// Окончательный многочлен со всеми свойствами 
class CPolynomial: public CUser
{
private:
    int *Change(int *koff, int size);
public:
    CPolynomial operator+ (const CPolynomial &Poly);
    CPolynomial operator- (const CPolynomial &Poly);
    CPolynomial operator* (const CPolynomial &Poly);
};

int max(int a, int b)
{
    return (a > b)?a:b;
}

int min(int a, int b)
{
    return (a < b)?a:b;
}

CPolynomial CPolynomial::operator* (const CPolynomial &Poly)
{
    CPolynomial buf;

    buf.n = Poly.n + n;
    buf.koff = new int (buf.n + 1);

    for (int i = 0; i <= buf.n; buf.koff[i] = 0, i++); 

    int bf;
    int *bf1 = Poly.koff;
    int *bf2;
    int *bf3 = buf.koff;
    int j;

    i = 0;
    while (i <= Poly.n) 
    {
        j = 0;
        bf2 = koff;
        while (j <= n)
        {
            bf = (*bf1) * (*bf2);
            bf3[i + j] += bf;
            bf2++;
            j++;
        }
        bf1++;
        i++;
    }

    return buf;
}

CPolynomial CPolynomial::operator+ (const CPolynomial &Poly)
{
    CPolynomial buf;
    
    int *bf1 = Poly.koff;
    int *bf2 = koff;
    int t = max(Poly.n, n);

    buf.SetN(t);

    int m = min(Poly.n, n);
    int i = t;

    while (i > m)
        if (Poly.n == t)
        {
            buf.koff[i--] = *bf1;
            bf1++;
        }
        else
        {
            buf.koff[i--] = *bf2;
            bf2++;
        }
    while (i >= 0)
    {
        buf.koff[i--] = *bf1 + *bf2;
        ++bf1;
        ++bf2;
    }

    int bf;

    for (i = 0; i < t; i++)
    {
        bf = buf.koff[i];
        buf.koff[i] = buf.koff[t - i];
        buf.koff[t - i] = bf;
    }

    return buf;
}

int *CPolynomial::Change(int *koff, int size)
{
    int *buf = koff;

    for (int i = 0; i <= size; i++)
    {
        *buf=-*buf;
        buf++;
    }

    return koff;
}

CPolynomial CPolynomial::operator- (const CPolynomial &Poly)
{
    CPolynomial buf;

    buf.SetN(Poly.n);
    buf.SetKoff(Poly.koff);

    buf.koff=Change(buf.koff, buf.n);

    return *this+buf;
}

int main(int argc, char* argv[])
{
    _wsetlocale (LC_ALL, L".866"); 
    

    wcout << L"---Работа с первым многочленом---" << endl;
    CPolynomial Poly1;

    Poly1.GetData();
    Poly1.ShowData();

    int x;
    wcout << L"Введите значение Х для подсчета в нем значения многочлена -> ";
    cin >> x;
    wcout << L"Многочлен равен " << Poly1.ResultIn(x) << endl << endl;

    wcout << L"---Работа с первым многочленом завершена---" << endl;
    wcout << L"---Работа со вторым многочленом---" << endl;
    
    CPolynomial Poly2;

    Poly2.GetData();
    Poly2.ShowData();

    wcout << L"---Работа со вторым многочленом завершена---" << endl;
    wcout << L"---Работа с двумя многочленами---" << endl;

    (Poly1 + Poly2).ShowData();
    (Poly1 - Poly2).ShowData();
    (Poly1 * Poly2).ShowData();

    wcout << L"---Работа с двумя многочленами завершена---" << endl;

    system("PAUSE");

    return 0;
}


Она вроде работает, но здесь явно что-то оформлено не по С++'овски... Укажите что и как тут должно быть...

Сейчас попытался ввести многочлен степени 3... Почему-то она (прога) обращатся не к тому, что нужно, а именно вылетает с ошибкой. Не получается считать первый коэффициент при выводе...

P. S.
Помогающим гарантируются плюсы, если что-то дельное подскажете и с примерами...

Добавлено @ 20:32 
Кстати, юзается Microsoft Visual C++ 6.0 
PM   Вверх
MAKCim
Дата 18.5.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата

но здесь явно что-то оформлено не по С++'овски... 

1. В CMainData вместо массива int* лучше, имхо, использовать готовый вектор (отпадает необходимомть контроля за выделением/освобождением памяти)
Код

std::vector<int> koff;

2. 
Цитата

Код

    friend class CUser;
    friend class CPolynomial;


судя по коду классы нигде не объявлены и не определены в месте использования в качестве friend
3. использование потоков cin, cout
в CUser::ShowData() нехорошо, лучше наверное перегрузить operator<<() для CUser
Код

std::ostream& operator<<(std::ostream& stream, const CUser& obj)
{
    // вывод в поток stream нужных данных из obj
    return stream;
}

4. неправильная семантика использования operator+, operator- в СPolynomial
правильнее определить operator+=, operator-=, ... а через них operator+, operator-, ... (не как члены класса)
Код

class CPolynomial
{
...
public:
    CPolynomial& operator+=(const CPolynomial& obj) {...}
...
};

CPolynomial operator+(const CPolynomial& obj_a, const CPolynomial& obj_b)
{
    CPolynomial obj(obj_a);
    obj+=obj_b;
    return obj;
}
...

5. Использовать friend надо, имхо, как можно реже
В данном случае я бы сделал нечто такое
Код

template<class K> class CPolynomial
{
public:
    typedef K koef_t;
private:
    typedef vector<koef_t> array_t;
    typedef CPolynomial<koef_t> self_t;
private:
    array_t array_;
public:
    CPolynomial(...) {...}

    self_t& operator+=(const self_t&);
    self_t& operator-=(const self_t&);
...
};


Добавлено @ 21:28 
если степень многочлена известна в compile-time
можно воспользоваться для хранения cell-ов шаблоном (время компиляции увеличится зато увеличится также быстродействие)
Код

template<unsigned int C, class K>
    class CPolynomial
{
...
private:
    koef_t array_[C];
...
};


Добавлено @ 21:36 
если важна производительность и нельзя использовать статические массивы, можно использовать вместо vector<koef_t>
valarray<koef_t>, который специально создавался для численных операций 

Это сообщение отредактировал(а) MAKCim - 18.5.2006, 21:33


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Fixin
Дата 18.5.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 5
Всего: 18



Код

#include "iostream"    
#include "fstream"    
#include "locale"    
using namespace std;    
// Класс для хранения многочлена и примитивной работы с ним    
class CMainData    
{    
private:    
    int n;    
    int *koff;    
public:    
    CMainData();    
    void SetN(int _n);    
    void SetKoff(int *_koff);    
    friend class CUser;    
    friend class CPolynomial;    
};    
CMainData::CMainData()    
{    
    n = 0;    
}    
void CMainData::SetN(int _n)    
{    
    n = _n;    
    koff = new int (n);    
    int *buf = koff;    
    for (int i = 0; i < n; *buf=0, buf++, i++);    
}    
void CMainData::SetKoff(int *_koff)    
{    
    int *buf = koff;
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    for (int i = 0; i <= n; *koff = *_koff, _koff++, koff++, i++);    
    koff=buf;    
}    
// Класс пользовательских примитивных возможностей    
class CUser: public CMainData    
{    
private:    
    int Degree(int n, int x);    
public:    
    void ShowData();    
    void GetData();    
    int ResultIn(int x);    
};    
int CUser::Degree(int n, int x)    
{    
    int i;    
    int buf = x;    
     
    for (i = 2; i <= n; buf *= x, i++);    
    buf = (n != 0)?buf:1;    
    return buf;    
}    
int CUser::ResultIn(int x)    
{    
    int res = 0;    
    for (int i = 0; i <= n; i++)    
        res += koff[i] * Degree(n - i, x);    
    return res;    
}    
void CUser::ShowData()    
{    
    wcout << endl << L"Многочлен: " << endl;    
     
    int m=n;    
    int *buf = koff;    
    bool b = false;    
     
    cout << *koff;    
    //system("PAUSE");    
    for (int i = 0; i <= n; i++)    
    {    
        if (*koff != 0)    
        {    
            m = m-i;    
            if (*koff < 0)    
                cout << "-";    
            else    
                if (b == true)    
                    cout << "+";    
            if ((abs(*koff) != 1) || (m == 0))    
                cout << abs(*koff);    
            if (m >= 1)    
                cout << "x";    
            if (m > 1)    
                cout << "^" << m;    
            b = true;    
        }    
        koff++;    
    }    
    if (b == false)    
        cout << "0";    
    koff=buf;    
    cout << endl << endl;    
}    
void CUser::GetData()    
{    
    int _n;    
    wcout << L"Введите степень многочлена -> ";    
    cin >> _n;    
    SetN(_n);    
    int *buf, *b;    
    buf = new int (n);    
    b = buf;    
    for (int i = 0; i <= n; i++)    
    {    
        wcout << L"Введите коэффициент " << i << L" -> ";    
        cin >> *buf;    
        if (i < n)    
            buf++;    
    }    
    buf=b;    
    SetKoff(b);    
}    
// Окончательный многочлен со всеми свойствами    
class CPolynomial: public CUser    
{    
private:    
    int *Change(int *koff, int size);    
public:    
    CPolynomial operator+ (const CPolynomial &Poly);    
    CPolynomial operator- (const CPolynomial &Poly);    
    CPolynomial operator* (const CPolynomial &Poly);    
};    
int max(int a, int b)    
{    
    return (a > b)?a:b;    
}    
int min(int a, int b)    
{    
    return (a < b)?a:b;    
}    
CPolynomial CPolynomial::operator* (const CPolynomial &Poly)    
{    
    CPolynomial buf;    
    buf.n = Poly.n + n;    
    buf.koff = new int (buf.n + 1);    
    for (int i = 0; i <= buf.n; buf.koff[i] = 0, i++);    
    int bf;    
    int *bf1 = Poly.koff;    
    int *bf2;    
    int *bf3 = buf.koff;    
    int j;    
    i = 0;    
    while (i <= Poly.n)    
    {    
        j = 0;    
        bf2 = koff;    
        while (j <= n)    
        {    
            bf = (*bf1) * (*bf2);    
            bf3[i + j] += bf;    
            bf2++;    
            j++;    
        }    
        bf1++;    
        i++;    
    }    
    return buf;    
}    
CPolynomial CPolynomial::operator+ (const CPolynomial &Poly)    
{    
    CPolynomial buf;    
     
    int *bf1 = Poly.koff;    
    int *bf2 = koff;    
    int t = max(Poly.n, n);    
    buf.SetN(t);    
    int m = min(Poly.n, n);    
    int i = t;    
    while (i > m)    
        if (Poly.n == t)    
        {    
            buf.koff[i--] = *bf1;    
            bf1++;    
        }    
        else    
        {    
            buf.koff[i--] = *bf2;    
            bf2++;    
        }    
    while (i >= 0)    
    {    
        buf.koff[i--] = *bf1 + *bf2;    
        ++bf1;    
        ++bf2;    
    }    
    int bf;    
    for (i = 0; i < t; i++)    
    {    
        bf = buf.koff[i];    
        buf.koff[i] = buf.koff[t - i];    
        buf.koff[t - i] = bf;    
    }    
    return buf;    
}    
int *CPolynomial::Change(int *koff, int size)    
{    
    int *buf = koff;    
    for (int i = 0; i <= size; i++)    
    {    
        *buf=-*buf;    
        buf++;    
    }    
    return koff;    
}    
CPolynomial CPolynomial::operator- (const CPolynomial &Poly)    
{    
    CPolynomial buf;    
    buf.SetN(Poly.n);    
    buf.SetKoff(Poly.koff);    
    ////////////////////////////////////ну и на кой ты возвращаешь адрес? ты уже изменил все внутри блока памяти, адресованного buf.koff
    Change(buf.koff, buf.n);
    return *this+buf;    
}    
int main(int argc, char* argv[])    
{    
    _wsetlocale (LC_ALL, L".866");    
     
    wcout << L"---Работа с первым многочленом---" << endl;    
    CPolynomial Poly1;    
    Poly1.GetData();    
    Poly1.ShowData();    
    int x;    
    wcout << L"Введите значение Х для подсчета в нем значения многочлена -> ";    
    cin >> x;    
    wcout << L"Многочлен равен " << Poly1.ResultIn(x) << endl << endl;    
    wcout << L"---Работа с первым многочленом завершена---" << endl;    
    wcout << L"---Работа со вторым многочленом---" << endl;    
     
    CPolynomial Poly2;    
    Poly2.GetData();    
    Poly2.ShowData();    
    wcout << L"---Работа со вторым многочленом завершена---" << endl;    
    wcout << L"---Работа с двумя многочленами---" << endl;    
    system("PAUSE");
    (Poly1 + Poly2).ShowData();    
    (Poly1 - Poly2).ShowData();    
    (Poly1 * Poly2).ShowData();    
    wcout << L"---Работа с двумя многочленами завершена---" << endl;    
    system("PAUSE");    
    system("PAUSE");    
    return 0;    
}
Я ничего не сделал, но вроде выводит... 
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 19.5.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Цитата(MAKCim @  18.5.2006,  22:23 Найти цитируемый пост)
лучше наверное перегрузить operator<<() 


Лучше, но компилятор ругается на все это дело вот так:
Цитата(Microsoft Visual C++ 6.0)

error C2804: binary 'operator <<' has too many parameters


 smile  
PM   Вверх
Pakshin A. S.
Дата 19.5.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Код

// Project2.cpp : Defines the entry point for the console application.
//

#include "iostream"
#include "fstream"
#include "locale"

using namespace std;

/*using std::ostream;
using std::cout;
using std::endl;*/

// Класс для хранения многочлена и примитивной работы с ним
class CMainData
{
private:
    int n;
    int koff[100];
public:
    CMainData();
    void SetN(int _n);
    void SetKoff(int *_koff);
    int GetN();
    int* GetKoff();

    friend class CUser;
    friend class CPolynomial;

    friend ostream& operator<< (ostream& stream, const CMainData& obj);
};


int* CMainData::GetKoff()
{
    return koff;
}

int CMainData::GetN()
{
    return n;
}

CMainData::CMainData()
{
    n = 0;
}

void CMainData::SetN(int _n)
{
    n = _n;

    // Вырезано в текущей версии
}

void CMainData::SetKoff(int *_koff)
{
    // Вырезано в текущей версии
}


// Класс пользовательских примитивных возможностей
class CUser: public CMainData
{
private:
    int Degree(int n, int x);
public:
    void ShowData();
    void GetData();
    int ResultIn(int x);
};

int CUser::Degree(int n, int x)
{
    int i;
    int buf = x;
    
    for (i = 2; i <= n; buf *= x, i++);

    buf = (n != 0)?buf:1;

    return buf;
}

int CUser::ResultIn(int x)
{
    int res = 0;

    for (int i = 0; i <= n; i++)
        res += koff[i] * Degree(n - i, x);

    return res;
}

void CUser::ShowData()
{
    wcout << endl << L"Многочлен: " << endl;
    
    int m=n;
    bool b = false;

    for (int i = 0; i <= n; i++)
    {
        if (koff[i] != 0)
        {
            if (koff[i] < 0) 
                cout << "-";
            else 
                if (b == true)
                    cout << "+";
            if ((abs(koff[i]) != 1) || (m == 0))
                cout << abs(koff[i]);
            if (m >= 1)
                cout << "x";
            if (m > 1)
                cout << "^" << m;
            b = true;
        }
        m--;
    }
    if (b == false)
        cout << "0";
    cout << endl << endl;
}

void CUser::GetData()
{
    int _n;

    wcout << L"Введите степень многочлена -> ";
    cin >> _n;
    SetN(_n);

    for (int i = 0; i <= n; i++)
    {
        wcout << L"Введите коэффициент " << i << L" -> ";
        cin >> koff[i];
    }

}

// Окончательный многочлен со всеми свойствами 
class CPolynomial: public CUser
{
private:
    int max(int a, int b);
    int min(int a, int b);
public:
    CPolynomial operator+ (const CPolynomial &Poly);
    CPolynomial operator- (const CPolynomial &Poly);
    CPolynomial operator* (const CPolynomial &Poly);
};

int CPolynomial::max(int a, int b)
{
    return (a > b)?a:b;
}

int CPolynomial::min(int a, int b)
{
    return (a < b)?a:b;
}

ostream& operator<< (ostream& stream, const CMainData& obj)
{
    wcout << endl << L"Многочлен: " << endl;
    
    int nn=obj.GetN();
    int *kof=obj.GetKoff();
    int m=nn;
    bool b = false;

    for (int i = 0; i <= nn; i++)
    {
        if (kof[i] != 0)
        {
            if (kof[i] < 0) 
                stream << "-";
            else 
                if (b == true)
                    stream << "+";
            if ((abs(kof[i]) != 1) || (m == 0))
                stream << abs(kof[i]);
            if (m >= 1)
                stream << "x";
            if (m > 1)
                stream << "^" << m;
            b = true;
        }
        m--;
    }
    if (b == false)
        stream << "0";
    stream << endl << endl;

    return stream;
}

CPolynomial CPolynomial::operator* (const CPolynomial &Poly)
{
    CPolynomial buf;

    buf.SetN(Poly.n + n);

    for (int i = 0; i <= buf.n; buf.koff[i] = 0, i++); 

    int bf;
    int j;

    i = 0;
    while (i <= Poly.n) 
    {
        j = 0;
        while (j <= n)
        {
            bf = (Poly.koff[i]) * (koff[j]);
            buf.koff[i + j] += bf;
            j++;
        }
        i++;
    }

    return buf;
}

CPolynomial CPolynomial::operator+ (const CPolynomial &Poly)
{
    CPolynomial buf;
    
    int t = max(Poly.n, n);

    buf.SetN(t);

    int m = min(Poly.n, n);
    int i = t;

    int k = 0;
    int l = 0;

    while (i > m)
        if (Poly.n == t)
            buf.koff[i--] = Poly.koff[k++];
        else
            buf.koff[i--] = koff[l++];
            
    while (i >= 0)
        buf.koff[i--] = Poly.koff[k++] + koff[l++];

    int bf;

    for (i = 0; i < t; i++)
    {
        bf = buf.koff[i];
        buf.koff[i] = buf.koff[t - i];
        buf.koff[t - i] = bf;
    }

    return buf;
}


CPolynomial CPolynomial::operator- (const CPolynomial &Poly)
{
    CPolynomial buf;

    buf.SetN(Poly.n);
    
    for (int i=0; i <= buf.n; buf.koff[i] = -Poly.koff[i], i++);

    return *this+buf;
}

int main(int argc, char* argv[])
{
    _wsetlocale (LC_ALL, L".866"); 
    

    wcout << L"---Работа с первым многочленом---" << endl;
    CPolynomial Poly1;

    
    cout << Poly1.GetN();

    Poly1.GetData();
    Poly1.ShowData();
    cout << Poly1;

    int x;
    wcout << L"Введите значение Х для подсчета в нем значения многочлена -> ";
    cin >> x;
    wcout << L"Многочлен равен " << Poly1.ResultIn(x) << endl << endl;

    wcout << L"---Работа с первым многочленом завершена---" << endl;
    wcout << L"---Работа со вторым многочленом---" << endl;
    
    CPolynomial Poly2;

    Poly2.GetData();
    Poly2.ShowData();
    
    wcout << L"---Работа со вторым многочленом завершена---" << endl;
    wcout << L"---Работа с двумя многочленами---" << endl;

    (Poly1 + Poly2).ShowData();
    (Poly1 - Poly2).ShowData();
    (Poly1 * Poly2).ShowData();

    wcout << L"---Работа с двумя многочленами завершена---" << endl;

    system("PAUSE");

    return 0;
}


Короче с перегрузкой << ничего не выходит... smile 
PM   Вверх
nostromo
Дата 19.5.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: 4
Всего: 10



Странно, у меня последний листинг заработал. Правда, VS 2003 и убрал const из 
ostream& operator<< (ostream& stream, const CMainData& obj).

В чем проблема? Как ругается компилятор?

Еще, в теле оператора "<<" Вы используете "wcout <<" вместо  "stream <<". Кажется, это может привести к неприятностям. 

Дале, зачем в CPolynomial методы min, max. Есть стандартные std::max<int>, std::min<int>.

И главное: я полностью согласен со всеми замечаниями MAKCim-а, текст нужно переписывать. 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
Pakshin A. S.
Дата 19.5.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Цитата

error C2662: 'GetN' : cannot convert 'this' pointer from 'const class CMainData' to 'class CMainData &'


на строчку в перегружаемом операторе int nn=obj.GetN();

Добавлено @ 11:59 
Цитата(nostromo @  19.5.2006,  12:53 Найти цитируемый пост)
убрал const 

Да... помогло, но только 
error C2593: 'operator <<' is ambiguous
при cout << Poly1;

Добавлено @ 12:00 
Цитата(Pakshin A. S. @  19.5.2006,  12:56 Найти цитируемый пост)
error C2593: 'operator <<' is ambiguous

Тьфу.. убрал ошибку... 
PM   Вверх
MAKCim
Дата 19.5.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата

убрал const 

не стоит, в CMainData лучше сделать GetN() константой (так и напрашивается)
Код

int GetN() [B]const[/B];


Добавлено @ 19:40 
все таки я не понимаю, зачем Вам аж 3 класса для реализации многочлена? 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Pakshin A. S.
Дата 19.5.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Цитата(MAKCim @  19.5.2006,  20:39 Найти цитируемый пост)
все таки я не понимаю, зачем Вам аж 3 класса для реализации многочлена?  


А тут было одной из задач - использовать как можно больше вещей из ООП.. Мне на больную голову пришло такое... smile Хотел вепить еще виртуальные функции... 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.