1 / 24

Abstract Data Type

Abstract Data Type. Summary. A class can be used not only to combine data but also to combine data and functions into a single (compound) object. A member variable or function may be either public or private It can be used outside of the class when it’s public

sophieb
Télécharger la présentation

Abstract Data Type

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Abstract Data Type

  2. Summary • A class can be used not only to combine data but also to combine data and functions into a single (compound) object. • A member variable or function may be either public or private • It can be used outside of the class when it’s public • It can only be used by other member functions of the same class when it’s private • An object of a class can be copied by “=“, memberwise copy (for static classes) • ‘const’ is part of the function definition • A constructor is a member function called automatically when an object is declared • Each class has to have at least one constructor • Constructors can be overloaded as long as the argument lists are different

  3. What is an abstract data type? A data type consists of a collection of values together with a set of basic operations on these values A data type is an abstract data type if the programmers who use the type do not have access to the details of how the values and operations are implemented. All pre-defined types such as int, double, … are abstract data types An abstract data type is a ‘concrete’ type, only implementation is ‘abstract’

  4. 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, used as black boxes, hide the implementation details • 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.

  5. How to do it in C++ with classes? Separate the public interface from implementation, If you change the implementation, you don’t need to change the other parts of the programmes. Make all the member variables private  private data (implementation details) Make member functions public  public interface

  6. Multiplication Division Rational number Ratio of two integers: a/b Numerator over the denominator Standard operations Addition Subtraction Rational Review

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

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

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

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

  11. main() 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; }

  12. Default-Value Constructor // default-value constructor Rational::Rational() { Numerator = 0; Denominator = 1; } • Example Rational r; // r = 0/1

  13. Explicit-Value Constructor // explicit-value constructor Rational::Rational(int numer, int denom) { Numerator = numer; Denominator = denom; } Example Rational t1(2,3); // t1 = 2/3 Rational t2(2); // t2 = 2/1 = 2 Note: the prototype is Rational(int numer, int denom = 1);

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

  15. Copy Constructor (automatic) // copy constructor, automatically provided Rational::Rational(const Rational& r) { Numerator = r.Numerator; Denominator = r.Denominator; } Example Rational t1(2,3); // t1 = 2/3 Rational t2(t1); // t2 = 2/3 Note: very important concept, and it is AUTOMATIC for static classes!

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

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

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

  19. Rational Rational::Divide(const Rational r) const { int a = Numerator; int b = Denominator; int c = r.Numerator; 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);

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

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

  22. I/O Functions void Rational::Display() const{ cout << Numerator << '/' << Denominator; } Example t.Display();

  23. 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();

  24. 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 initialisation assignment

More Related