Top Banner
More on Classes
20

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

Dec 17, 2015

Download

Documents

Dortha Horton
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: More on Classes. COMP104 ADT / Slide 2 Abstract Data Type * An Abstract Data Type is a class with some special restrictions. * These restrictions can.

More on

Classes

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

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).

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

COMP104 ADT / Slide 3

Multiplication

Division

Rational Review

Rational number Ratio of two integers: a/b

Numerator over the denominator

Standard operations Addition

Subtraction

ab

+cd

=ad + bc

bd

ab*cd

=acbd

ab

-cd

=ad - bc

bd

ab/cd

=adbc

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

COMP104 ADT / Slide 4

Rational Representation

Represent a numerator and denominator with two int data members Numerator and Denominator Data members private (information hiding)

Public arithmetic member functions Rational addition, subtraction, multiplication,

division

Public relational member functions Equality and less than comparisons

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

COMP104 ADT / Slide 5

Rational Representation Member functions

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;

Assignment (provided automatically: simply copies data members)

r = t; Inputting and displaying object

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

a Values:

Numerator = 1Denominator = 2

b Values

Numerator = 2Denominator = 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);

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

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()

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

COMP104 ADT / Slide 8

Rational Overviewclass Rational {

public:

// for Rational member functions

// for everybody (like "global" variables)

private:

// for Rational data members

// like "local" variables

} ;

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

COMP104 ADT / Slide 9

Rational Classclass 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 functionsbool Equal(const Rational r) const;bool LessThan(const Rational r) const;

// i/o functionsvoid Display() const;void Get();

private: // data membersint Numerator;int Denominator;

};

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

COMP104 ADT / Slide 10

const

You can use const on user-defined types as usual:

const Rational OneHalf(1,2);OneHalf.Display(); // no problemOneHalf.Get(); // illegal: OneHalf is a const

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

COMP104 ADT / Slide 11

Default-Value Constructor

// default-value constructor

Rational::Rational(){

Numerator = 0;

Denominator = 1;

}

Example

Rational r; // r = 0/1

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

COMP104 ADT / Slide 12

Explicit-Value Constructor

// explicit-value constructorRational::Rational(int numer, int denom){

Numerator = numer; Denominator = denom;if(Denominator == 0){ cout << "Illegal denominator of zero, "

<< "using 1 instead" << endl; Denominator = 1;}

}

ExampleRational t(2,3); // t = 2/3

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

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;

}

ExampleRational t(1,2), u(3, 4); Rational v = t.Add(u);

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

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;

}

ExampleRational t(1,2), u(3, 4); Rational v = t.Multiply(u);

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

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;

}

ExampleRational t(1,2), u(3, 4); Rational v = t.Subtract(u);

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

COMP104 ADT / Slide 16

Arithmetic FunctionsRational 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;

}

ExampleRational t(1,2), u(3, 4); Rational v = t.Divide(u);

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

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!";

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

COMP104 ADT / Slide 18

Relational Functionsbool 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;}

Exampleif(s.LessThan(t))

cout << "The first is less than the second!";

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

COMP104 ADT / Slide 19

I/O Functions

void Rational::Display() const{

cout << Numerator << '/' << Denominator;

}

Example

t.Display();

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

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;}

}

Examplet.Get();