Presentation is loading. Please wait.

Presentation is loading. Please wait.

More on Classes. COMP104 ADT / Slide 2 Abstract Data Type * An Abstract Data Type is a class with some special restrictions. * These restrictions can.

Similar presentations


Presentation on theme: "More on Classes. COMP104 ADT / Slide 2 Abstract Data Type * An Abstract Data Type is a class with some special restrictions. * These restrictions can."— Presentation transcript:

1 More on Classes

2 COMP104 ADT / Slide 2 Abstract Data Type * An Abstract Data Type is a class with some special restrictions. * These restrictions can make programming easier. * One of these restrictions is called information hiding, and it helps avoid common problems (e.g., a denominator of zero should not be allowed in rational numbers). * In information hiding, the user should not be allowed to access the data members directly (they should be private). * An Abstract Data Type is used in Object-Oriented Programming (COMP151).

3 COMP104 ADT / Slide 3 n Multiplication n Division Rational Review * Rational number Ratio of two integers: a/b  Numerator over the denominator * Standard operations n Addition n Subtraction

4 COMP104 ADT / Slide 4 Rational Representation  Represent a numerator and denominator with two int data members Numerator and Denominator n Data members private (information hiding) * Public arithmetic member functions n Rational addition, subtraction, multiplication, division * Public relational member functions n Equality and less than comparisons

5 COMP104 ADT / Slide 5 Rational Representation * Member functions n Constructors  Default-value constructor Rational r;  Explicit-value constructor Rational r(3, 4);  Copy constructor (provided automatically: simply copies data members) Rational r(t);Rational r = t; n Assignment (provided automatically: simply copies data members) r = t; n Inputting and displaying object

6 a Values: Numerator = 1 Denominator = 2 b Values Numerator = 2 Denominator = 3 Class Rational Public interface: Add(), Subtract(), Multiply(),Divide(), Equal(), LessThan(), Display(), Get() Data members: Numerator, Denominator Rational a(1,2); Rational b(2,3);

7 COMP104 ADT / Slide 7 void main(){ Rational r; Rational s; cout << "Enter two rationals(a/b): "; r.Get(); s.Get(); Rational t(r); Rational sum = r.Add(s); r.Display(); cout << " + "; s.Display(); cout << " = "; sum.Display();cout << endl; Rational product = r.Multiply(s); r.Display(); cout << " * "; s.Display(); cout << " = "; product.Display();cout << endl; } main()

8 COMP104 ADT / Slide 8 Rational Overview class Rational { public: // for Rational member functions // for everybody (like "global" variables) private: // for Rational data members // like "local" variables } ;

9 COMP104 ADT / Slide 9 Rational Class class Rational{ public: // default-value constructor Rational(); // explicit-value constructor Rational(int numer, int denom = 1); // arithmetic functions Rational Add(const Rational r) const; Rational Subtract(const Rational r) const; Rational Multiply(const Rational r) const; Rational Divide(const Rational r) const; // relational functions bool Equal(const Rational r) const; bool LessThan(const Rational r) const; // i/o functions void Display() const; void Get(); private:// data members int Numerator; int Denominator; };

10 COMP104 ADT / Slide 10 const  You can use const on user-defined types as usual: const Rational OneHalf(1,2); OneHalf.Display(); // no problem OneHalf.Get(); // illegal: OneHalf is a const

11 COMP104 ADT / Slide 11 Default-Value Constructor // default-value constructor Rational::Rational(){ Numerator = 0; Denominator = 1; } * Example Rational r; // r = 0/1

12 COMP104 ADT / Slide 12 Explicit-Value Constructor // explicit-value constructor Rational::Rational(int numer, int denom){ Numerator = numer; Denominator = denom; if( Denominator == 0){ cout << "Illegal denominator of zero, " << "using 1 instead" << endl; Denominator = 1; } * Example Rational t(2,3); // t = 2/3

13 COMP104 ADT / Slide 13 Arithmetic Functions Rational Rational::Add(const Rational r) const{ int a = Numerator; int b = Denominator; int c = r.Numerator; int d = r.Denominator; Rational result(a*d + b*c, b*d); return result; } * Example Rational t(1,2), u(3, 4); Rational v = t.Add(u);

14 COMP104 ADT / Slide 14 Arithmetic Functions Rational Rational::Multiply(const Rational r) const{ int a = Numerator; int b = Denominator; int c = r.Numerator; int d = r.Denominator; Rational result(a*c, b*d); return result; } * Example Rational t(1,2), u(3, 4); Rational v = t.Multiply(u);

15 COMP104 ADT / Slide 15 Arithmetic Functions Rational Rational::Subtract(const Rational r) const{ int a = Numerator; int b = Denominator; int c = r.Numerator; int d = r.Denominator; Rational result(a*d - b*c, b*d); return result; } * Example Rational t(1,2), u(3, 4); Rational v = t. Subtract (u);

16 COMP104 ADT / Slide 16 Arithmetic Functions Rational Rational::Divide(const Rational r) const{ int a = Numerator; int b = Denominator; int c = r.Numerator; if( c == 0){ cout << "Illegal denominator of zero, " << "using 1 instead" << endl; c = 1; } int d = r.Denominator; Rational result(a*d, b*c); return result; } * Example Rational t(1,2), u(3, 4); Rational v = t. Divide (u);

17 COMP104 ADT / Slide 17 Relational Functions bool Rational::Equal(const Rational r) const{ double a, b; a = double(Numerator)/Denominator; b = double(r.Numerator)/r.Denominator; if(a == b) return true; else return false; } * Example if(s.Equal(t)) cout << "They are the same!";

18 COMP104 ADT / Slide 18 Relational Functions bool Rational::LessThan(const Rational r) const{ double a, b; a = double(Numerator)/Denominator; b = double(r.Numerator)/r.Denominator; if(a < b) return true; else return false; } * Example if(s.LessThan(t)) cout << "The first is less than the second!";

19 COMP104 ADT / Slide 19 I/O Functions void Rational::Display() const{ cout << Numerator << '/' << Denominator; } * Example t.Display();

20 COMP104 ADT / Slide 20 I/O Functions void Rational::Get(){ char slash; cin >> Numerator >> slash >> Denominator; if( Denominator == 0){ cout << "Illegal denominator of zero, " << "using 1 instead" << endl; Denominator = 1; } * Example t.Get();


Download ppt "More on Classes. COMP104 ADT / Slide 2 Abstract Data Type * An Abstract Data Type is a class with some special restrictions. * These restrictions can."

Similar presentations


Ads by Google