Program 19.3 shows how a program to implement a Fraction class might be written using the C++ language. C++ has become an extremely popular programming language for software development. It was invented by Bjarne Stroustroup at Bell Laboratories, and was the first object-oriented programming language based on C—at least to my knowledge!
Program 19.3 Working with Fractions in C++
#include <iostream>
class Fraction
{
private:
int numerator;
int denominator;
public:
void setNumerator (int num);
void setDenominator (int denom);
int Numerator (void);
int Denominator (void);
void print (Fraction f);
};
void Fraction::setNumerator (int num)
{
numerator = num;
}
void Fraction::setDenominator (int denom)
{
denominator = denom;
}
int Fraction::Numerator (void)
{
return numerator;
}
int Fraction::Denominator (void)
{
return denominator;
}
void Fraction::print (void)
{
std::cout << “The value of the fraction is ” << numerator << ‘/’
<< denominator << ‘\n’;
}
int main (void)
{
Fraction myFract;
myFract.setNumerator (1);
myFract.setDenominator (3);
myFract.print ();
return 0;
}
Program 19.3 Output
The value of the fraction is 1/3
The C++ members (instance variables) numerator and denominator are labeled private to enforce data encapsulation; that is, to prevent them from being directly accessed from outside the class.
The setNumerator method is declared as follows:
void Fraction::setNumerator (int num)
The method is preceded by the notation Fraction:: to identify that it belongs to the Fraction class.
A new instance of a Fraction is created like a normal variable in C, as in the follow- ing declaration in main:
Fraction myFract;
The numerator and denominator of the fraction are then set to 1 and 3, respectively, with the following method calls:
myFract.setNumerator (1);
myFract.setDenominator (3);
The value of the fraction is then displayed using the fraction’s print method.
Probably the oddest-appearing statement from Program 19.3 occurs inside the print method as follows:
std::cout << “The value of the fraction is ” << numerator << ‘/’
<< denominator << ‘\n’;
cout is the name of the standard output stream, analogous to stdout in C. The << is known as the stream insertion operator, and it provides an easy way to get output.You might recall that << is also C’s left shift operator. This is one significant aspect of C++: a feature known as operator overloading that allows you to define operators that are associat- ed with a class. Here, the left shift operator is overloaded so that when it is used in this context (that is, with a stream as its left operand), it invokes a method to write a format- ted value to an output stream, instead of trying to actually perform a left shift operation.
As another example of overloading, you might want to override the addition operator + so that if you try to add two fractions together, as in
myFract + myFract2
an appropriate method from your Fraction class is invoked to handle the addition.
Each expression that follows the << is evaluated and written to the standard output stream. In this case, first the string “The value of the fraction is” gets written, followed by the fraction’s numerator, followed by a /, the fraction’s denominator, and then a newline character.
The C++ language is rich with features. Consult Appendix E, “Resources,” for rec- ommendations on a good tutorial.
Note that in the previous C++ example, the getter methods Numerator () and Denominator () were defined in the Fraction class but were not used.
Source: Kochan Stephen G. (2004), Programming in C: A Complete Introduction to the C Programming Language, Sams; Subsequent edition.