NewAtCPlusPlus
NewAtCPlusPlus

Reputation: 1

Trying to create an object and print it to output

Hi I have a polynomials class and I am trying to print the polynomial to the screen but am having issues. I created a method and within the method the object (Polynomial) prints but when I try to print it from outside of the method it does not which leads me to believe that I am not creating the object properly. When I include the method create() in main, the object prints itself to the screen but when I use the printscreen() method, it does not print. Any help would be appreciated.

I am reposting the entire code to avoid any confusion

    #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);

Upvotes: 0

Views: 704

Answers (2)

Kerrek SB
Kerrek SB

Reputation: 477228

Well, in create() you are saying:

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

In printscreen(), on the other hand, you are saying,

{
  Polynomial a;
  a.print();
}

Clearly the crucial step of setting up the polynomial is missing entirely.

All this setup should probably go in a member function of the Polynomial class rather than in a free function...

By the way, there's no term "method" in C++; instead, we prefer to speak of "member functions", but you don't seem to have defined any member functions in your question.


If I'm guessing the context wrong and all those are in fact member functions, then change printscreen() to:

void printscreen() const   // in global scope this is "Polynomial::printscreen()"
{
  std::cout << "Your polynomial is ";
  this->print();
}

Upvotes: 1

amit kumar
amit kumar

Reputation: 21022

Use

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

and call

printscreen(a); 

Upvotes: 1

Related Questions