GIDForums  

Go Back   GIDForums > Computer Programming Forums > C++ Forum
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 18-Sep-2005, 14:49
Elsydeon Elsydeon is offline
Junior Member
 
Join Date: Aug 2005
Posts: 45
Elsydeon is on a distinguished road

Non-member method needs info from class... how?


I need to write a method that will print a fraction... the two numbers of said fraction are stored seperately... however, the method cannot be part of the class, and the information is private and needs to stay that way. How can I get that information to my method without making it a part of said class?
  #2  
Old 19-Sep-2005, 08:33
Elsydeon Elsydeon is offline
Junior Member
 
Join Date: Aug 2005
Posts: 45
Elsydeon is on a distinguished road
Not trying to bump my thread, just thought posting the code might get more response.

CPP / C++ / C Code:
#include <iostream.h> // for cerr

class rational
{	// represents a rational number in the form numerator / denominator.
	// conditions maintained in class:
	//   denominator > 0, sign maintained in numerator
	public:
		// methods
			rational (); // mirrors original constructor
				// declares a rational number and initializes it to 0/1
			rational (int numerator, int denominator);
				// declares and initializes the rational number
			void initialize (int numerator, int denominator, bool &ok);
				// initializes the rational number.  ok= (denominator > 0)
			int returnNumerator ();   // returns the numerator of the rational number
			int returnDenominator (); // returns the denominator of the rational number
			void reduce ();
			void add (rational fraction);
			void sub (rational fraction);
			void mul (rational fraction);
			void div (rational fraction);
			bool operator== (rational fraction);
	private:
		int numer, denom;
}; // class rational

bool rational::operator== (rational fraction) {
	return (numer==fraction.numer && denom==fraction.denom);
} // rational::operator==

rational::rational()
{	bool ok;
	initialize (0, 1, ok);
} //rational::rational

rational::rational (int numerator, int denominator)
{	bool ok;
	initialize (numerator, denominator, ok);
	if (!ok)
		cerr <<"Error: denominator is " <<denominator;
						// writes an error message to standard error stream
} // rational::rational

void rational::initialize (int numerator, int denominator, bool &ok)
{	if (denominator <= 0)
		ok= false;
	else
	{	ok= true;
		numer= numerator;
		denom= denominator;
	} //if
} // rational::rational

int rational::returnNumerator ()
{	return (numer);
} // rational::returnNumerator

int rational::returnDenominator ()
{	return (denom);
} // rational::returnDenominator

void rational::reduce () {
	int GCD (int, int);
	int x= GCD (numer, denom);
	numer /= x;
	denom /= x;
} // rational::reduce

int GCD (int a, int b)
// determines the greatest common divisor of a and b
// note: better algorithms exist!
{	int possCD, GCDsoFar= 1;
	for (possCD= 2; possCD <= a; ++possCD)
		if ((a % possCD == 0) && (b % possCD == 0))
			GCDsoFar= possCD;
	return (GCDsoFar);
} // GCD

void rational::add (rational fraction){
	void makeCommonDen (rational &, rational &);
	makeCommonDen (*this, fraction);
	numer= numer + fraction.numer;
	reduce();
} // rational::add*

void rational::sub (rational fraction){
	void makeCommonDen (rational &, rational &);
	makeCommonDen (*this, fraction);
	numer= numer - fraction.numer;
	reduce();
} // rational::sub*

void rational::mul (rational fraction){
	void makeCommonDen (rational &, rational &);
	makeCommonDen (*this, fraction);
	numer= numer * fraction.numer;
	reduce();
} // rational::mul

void rational::div (rational fraction){
	void makeCommonDen (rational &, rational &);
	makeCommonDen (*this, fraction);
	numer= numer / fraction.numer;
	reduce();
} // rational::div

void makeCommonDen (rational &fr1, rational &fr2)
{	bool ok;
	int commonDen= fr1.returnDenominator() *  fr2.returnDenominator() *
									GCD (fr1.returnDenominator(), fr2.returnDenominator());
	fr1.initialize (fr1.returnNumerator() * commonDen / fr1.returnDenominator(),
									commonDen, ok);
	fr2.initialize (fr2.returnNumerator() * commonDen / fr2.returnDenominator(),
									commonDen, ok);
} // makeCommonDen

void printFract(){
	cout<<numer<<endl<<"----"<<endl<<denom<<endl;

}//printFract

#include <iostream.h>

void main () {
	rational fraction1 (6, 14), fraction2 (-1, 7), fraction3;
	fraction1.reduce();
	cout <<fraction1.returnNumerator () <<"/" <<fraction1.returnDenominator() <<endl;
		// outputs: 3/7
	fraction1.add (fraction2);
	cout <<fraction1.returnNumerator () <<"/" <<fraction1.returnDenominator() <<endl <<endl;
		// outputs: 2/7
	if (fraction1==fraction2)
		cout <<"Equal." <<endl;
	else
		cout <<"Not equal." <<endl;

	printFract();
}

printFract is the part I'm talking about.
  #3  
Old 19-Sep-2005, 09:57
maprich maprich is offline
Member
 
Join Date: May 2005
Posts: 163
maprich has a spectacular aura aboutmaprich has a spectacular aura about
CPP / C++ / C Code:
class rational
{
    ///.......
  private:
    int numer, denom;

    friend void printFract();
};
the function printFract() not part of the class here. Just friend function.
  #4  
Old 19-Sep-2005, 15:13
Elsydeon Elsydeon is offline
Junior Member
 
Join Date: Aug 2005
Posts: 45
Elsydeon is on a distinguished road
I'd considered that right away, and I'll use it if I don't come up with anything else, but I'm not sure it's what is expected. Is there any other way to pull it off?
 
 

Recent GIDBlogFlickr uploads of IA pictures by crystalattice

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tutorial] GUI programming with FLTK dsmith FLTK Forum 10 03-Oct-2005 15:41
calling abstract base class method calls draw instead achoo FLTK Forum 1 19-Dec-2004 09:38
Error C2146: syntax error : missing ',' before identifier 'C4' mattchew008 C++ Forum 2 19-Dec-2004 06:06
Help! Some basal questions about MFC xutingnjupt MS Visual C++ / MFC Forum 1 05-Dec-2004 03:38

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 18:17.


vBulletin, Copyright © 2000 - 2008, Jelsoft Enterprises Ltd.