Попытка создать объект и распечатать его для вывода - PullRequest
0 голосов
/ 12 сентября 2011

Привет, у меня есть класс полиномов, и я пытаюсь вывести полином на экран, но у меня возникают проблемы.Я создал метод, и внутри метода печатается объект (полином), но когда я пытаюсь напечатать его извне метода, это не так, что заставляет меня поверить, что я не создаю объект должным образом.Когда я включаю метод create () в main, объект печатает себя на экране, но когда я использую метод printscreen (), он не печатает.Буду признателен за любую помощь.

Я публикую весь код, чтобы избежать путаницы

    #include "stdafx.h"
    #include <vector>
    #include <iostream>




    using namespace std;

    class Polynomial
    {
    private:
int coef[100];

int deg;

    public:
Polynomial::Polynomial()
//~Polynomial(void);
{
    for ( int i = 0; i < 100; i++ )
    {
        coef[i] = 0;
    }
}
void set ( int a , int b )
{
    coef[b] = a;
    deg = degree();
}

int degree()
{
    int d = 0;
    for (int i = 0; i < 100; i++ )
        if ( coef[i] != 0 ) d = i;
    return d;
}

void print()
{
    for ( int i = 99; i >= 0; i-- ) {
        if ( coef[i] != 0 ) {
            cout << coef[i] << "x^" << i << " "; 
        }
    }
}
void reset()
{
    for ( int i = 99; i >= 0; i-- ) {
        if ( coef[i] != 0 ) {
            coef[i] = 0; 
        }

    }
}
int count()
{
    int ct = 0;
    for ( int i = 99; i >= 0; i-- ) {
        if (coef[i] != 0 ) {
            ct++;
            return ct;
        }
    }
}


Polynomial plus ( Polynomial b )
{
    Polynomial a = *this;
    Polynomial c;

    for ( int i = 0; i <= a.deg; i++ ) c.coef[i] += a.coef[i];
    for ( int i = 0; i <= b.deg; i++ ) c.coef[i] += b.coef[i];
    c.deg = c.degree();

    return c;


}
    Polynomial minus ( Polynomial b )
    {
    Polynomial a = *this; //a is the poly on the L.H.S
    Polynomial c;

     for ( int i = 0; i <= a.deg; i++ ) c.coef[i] += a.coef[i];
     for ( int i = 0; i <= b.deg; i++ ) c.coef[i] -= b.coef[i];
     c.deg = c.degree();

     return c;
     }
     void printscreen () const
     {
 //Polynomial a;
 std::cout << "Your polynomial is ";
 this->print();
     }

     Polynomial create ()
 {
  int temp = 0;
  int terms = 0;
  int exp = 0;
  int n = 0;
  Polynomial a = *this;
  cout << "How many terms would you like there to be in your polynomial?";
  cin >> terms;
  for ( int i = 1; i <= terms; i++ ){
    n++;
    cout << "\n";
    cout << "What would you like to be your coefficient #"; cout << n; cout << "?";
    cin >> temp;
    cout << "What would you like to be your exponent #"; cout << n; cout << "?";
    cin >> exp;
    a.set ( temp, exp );

    }
    cout << "Your polynomial is "; a.print();
    return a;
     }

    };

    void menu (void)
    { cout<<endl<<endl;
    cout<<"What would you like to do next?  Please select from the following menu:"   <<endl;
    cout<<"1.  Create another polynomial"<<endl;
    cout<<"2.  Reset the polynomial"<<endl;
    cout<<"3.  Display the number of terms in the polynomial"<<endl;
    cout<<"4.  Sum the polynomials"<<endl;
    cout<<"5.  Print the polynomial"<<endl;
    cout<<"6. Quit"<<endl<<endl;
    cout<<"Enter selection>";
    }

    int _tmain(int argc, _TCHAR* argv[])
    {



    Polynomial a, b, c;

int choice;


a.create();

do {
  menu();
  cin>>choice;

  switch (choice) {
    case 1 :a.create();
            cout<<endl;
            break;

    case 2 : a.reset();
            cout<<endl<<"The polynomial has been reset."<<endl;
            break;

    case 3: cout<<endl<<"Length is ";//<<a.length()<<endl;
            break;

    case 4: cout<<endl<<"Sum is "; a.plus(b);//<<s.sum()<<endl;
            break;

    case 5: printscreen(a);
            break;

    case 6: cout<<endl<<"Thanks and goodbye."<<endl;
            break;

    default :  cout<<endl<<"Invalid command.  Try again."<<endl;
  }

     } while (choice != 6);

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Ну, в create() вы говорите:

{
  Polynomial a;
  //...
  a.set (temp, exp);
  //...
  a.print();
}

В printscreen(), с другой стороны, вы говорите,

{
  Polynomial a;
  a.print();
}

Ясно, что решающий шагнастройка полинома полностью отсутствует.

Вся эта настройка, вероятно, должна идти в функции-члене класса Polynomial, а не в свободной функции ...

Кстати, естьнет термина «метод» в C ++;вместо этого мы предпочитаем говорить о «функциях-членах», но вы, похоже, не определили никаких функций-членов в своем вопросе.


Если я угадаю контекст неправильно и все эти на самом деле являются членами-функциями, затем измените printscreen() на:

void printscreen() const   // in global scope this is "Polynomial::printscreen()"
{
  std::cout << "Your polynomial is ";
  this->print();
}
1 голос
/ 12 сентября 2011

Используйте

void printscreen (const Polynomial& a)
{
 cout<<"Your polynomial is "; a.print();
}

и звоните

printscreen(a); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...