arithmetic operators

i'm beginner in c++ i need some help. i want to write a c++ program using overloading arithmetic operators (+,-,*,/,=,+=,*=,-=, and %).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# include <iostream>
using namespace std; 

class Polynomial
{
private:
        int *Array ;
        int x ;
public:
      Polynomial(int y  , int arr[])
      {
         x = y ;
         Array = new int [x] ;                  
       }
       void  setPolynomial() ;
       int getPolynomial() ;

       void operator =  (const Polynomial& ) ;
       Polynomial operator +  (const Polynomial& )const ;
       Polynomial operator -  (const Polynomial& );
       Polynomial operator *  (const Polynomial& );
       Polynomial operator += (const Polynomial& );
       Polynomial operator -= (const Polynomial& );
       Polynomial operator *= (const Polynomial& );
       Polynomial operator / (const Polynomial& );
       Polynomial operator % (const Polynomial& );
};

guys how do i overload the operators
It looks like you have already overloaded the operators. Just provide some definitions and you're done. Though +, -, *, /, and % should probably all be const.
how do you guys doing it because, i'm new to c++
Have you tried reading you textbook at all? They may have a similar situation you can learn from and apply here.
closed account (D80DSL3A)
If you are just beginning then your project is going to be tough to do. It's not a simple case because of the dynamic array allocations involved - definitely study a textbook!

You may want to practice on a simpler problem. Try a complex number class. This has just two data members (the real and imaginary parts of the number).

I have started a Polynomial class along your problems lines as an exercise, but I am using type double for the coefficients. What will you do about division if you are restricted to integer coefficients for example?

I'll post some of my working code for you to learn from if you wish.
You would have to adapt from it to meet your specific problem needs.
i wish :D
Last edited on
closed account (D80DSL3A)
OK. I did offer. The following works but is not guaranteed to be the best way to do it.
I am still learning myself.

A test program is included which will prompt for a value (x) to evaluate the Polynomials for.
It tests the several operators as well.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<iostream>
using namespace std;

class Polynomial
{
private:
	int Nterms;
	double* pCoeffs;// from lowest to highest order

public:
	// utility
	double evaluateAt(double x);// evaluste the polynomial for the value x

	// operators
	Polynomial operator+(const Polynomial& p)const;
	Polynomial operator*(const Polynomial& p)const;
	Polynomial& operator=(const Polynomial& p);
	friend ostream& operator<<( ostream& os, const Polynomial& p );// BONUS!

	// constructors
	Polynomial( double Coeffs[], int N_terms );// full construction
	Polynomial( int N_terms = 0 );// default
	Polynomial( const Polynomial& p );// copy
	// destructor
	~Polynomial();// destructor VERY important this case
	
};
// full constructor
Polynomial::Polynomial( double Coeffs[], int N_terms )
{
	Nterms = N_terms;
	pCoeffs = new double[ Nterms ];
	for(int i=0; i<Nterms; i++)
		pCoeffs[i] = Coeffs[i];
}
// default constructor
Polynomial::Polynomial( int N_terms )
{	
	if( N_terms > 0 )
		Nterms = N_terms;	
	else
	{
		Nterms = 0;
		pCoeffs = NULL;
	}

	if( Nterms )
	{
		pCoeffs = new double[ Nterms ];
		for(int i=0; i<Nterms; i++)
			pCoeffs[i] = 0.0;
	}
}
// copy constructor
Polynomial::Polynomial( const Polynomial& p )
{
	Nterms = p.Nterms;
	pCoeffs = new double[ Nterms ];
	for(int i=0; i<Nterms; i++)
		pCoeffs[i] = p.pCoeffs[i];
}
// destructor
Polynomial::~Polynomial()
{ 
	if( pCoeffs )
	{
		delete [] pCoeffs;
		pCoeffs = NULL;
	}
}
// defines "addition" of Polynomials
Polynomial Polynomial::operator+(const Polynomial& p)const
{
	const Polynomial* pLong = Nterms >= p.Nterms ? this : &p;
	const Polynomial* pShort = Nterms < p.Nterms ? this : &p;
	Polynomial temp( *pLong );
	for(int i=0; i<pShort->Nterms; i++)
		temp.pCoeffs[i] += pShort->pCoeffs[i];// adding Polynomials term by term
	
	return temp;
}

// defines "multiplication" of Polynomials
Polynomial Polynomial::operator*(const Polynomial& p)const
{	
	Polynomial temp( this->Nterms + p.Nterms - 1 );
	
	for(int i=0; i < this->Nterms; i++)
		for(int j=0; j < p.Nterms; j++)
			temp.pCoeffs[i+j] += this->pCoeffs[i]*p.pCoeffs[j];
	
	return temp;
}

// assignment
Polynomial& Polynomial::operator=(const Polynomial& p)
{
	if( pCoeffs )
		delete [] pCoeffs;
	Nterms = p.Nterms;
	pCoeffs = new double[ Nterms ];
	for(int i=0; i<Nterms; i++)
		pCoeffs[i] = p.pCoeffs[i];
	return *this;
}
// output stream
ostream& operator<<( ostream& os, const Polynomial& p )
{	
	for(int i=p.Nterms-1; i>0; i--)
		os << p.pCoeffs[i] << "*x^" << i << " + ";
	os << p.pCoeffs[0];
	return os;
}
double Polynomial::evaluateAt(double x)
{
	double sum = 0.0;
	double xPow = 1.0;
	if( pCoeffs )	
		for(int i=0; i<Nterms; i++)
		{			
			sum += xPow*pCoeffs[i];
			xPow *= x;
		}	

	return sum;
}

int main(void)
{
	double Ca[3] = {1.0, 2.0, 3.0 };// for 2nd order 3x^2 + 2x + 1
	double Cb[5] = {1.0, 2.0, 3.0, 4.0, 5.0 };// for 4th order 5*x^4 + 4*x^3 +...+ 1
	Polynomial Pa( Ca, 3 ), Pb( Cb, 5 ), Pc;

	double x = 0.0;
	cout << "Enter a value for x: "; cin >> x;

	cout << "Pa = " << Pa << endl;
	cout << "Pa(" << x << ") = " << Pa.evaluateAt(x) << endl;
	cout << "Pb = " << Pb << endl;
	cout << "Pb(" << x << ") = " << Pb.evaluateAt(x) << endl;
	Pc = Pa + Pb;
	cout << "Pc = Pa + Pb = " << Pc << endl;
	cout << "Pc(" << x << ") = " << Pc.evaluateAt(x) << endl;
	Pc = Pa * Pb;
	cout << "Pc = Pa * Pb = " << Pc << endl;
	cout << "Pc(" << x << ") = " << Pc.evaluateAt(x) << endl;
	
	cout << endl;
	return 0;	
}
you are good
Topic archived. No new replies allowed.