Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++...
-
Upload
edwina-montgomery -
Category
Documents
-
view
215 -
download
2
Transcript of Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++...
![Page 1: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/1.jpg)
Object Oriented Programming
C++
![Page 2: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/2.jpg)
2
ADT vs. Class
• ADT: a model of data AND its related functions• C++ Class: a syntactical & programmatic
element for describing how the functions and data are related
• An ADT implementation has several parts:– interface function-names (methods)– operators (possibly re-defined symbols)– data
• Any/all of these may be public or private
![Page 3: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/3.jpg)
3
Classes
• Collection of data elements and functions• Functions are called "methods" or members of
the class– Tied to the data– May be hidden from other functions
• Member access – exposed by "public" names– Hidden by "private" names
![Page 4: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/4.jpg)
4
Classes - example
class Complx{public:
float my_real_part; float my_imag_part;
}; // note the semicolon!!!!!• Using "public" makes all elements "visible"• Using "private", would make them visible ONLY to
methods (functions) inside the class (not shown).• NOTE: looks a lot like a struct
![Page 5: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/5.jpg)
5
Program structure – pt 2 - C++
• Usually, put the class definition in a header file• #include it later in BOTH :– the implementation file • where the methods are defined
– the user-program file • where methods get used
![Page 6: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/6.jpg)
6
Objects
• An object is just a struct with members• Default operations (members)– Constructor– Destructor– Assignment– Copy
• YOU must provide any initialization code– in a constructor
• YOU must provide return values (if any)• YOU must free any dynamic storage
![Page 7: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/7.jpg)
7
Constructors
• C++ provides a "default" constructor• Only works if no parameters: Complx X;• Fails for uses like: Complx X(3,4);– variables get initialized– other setup must be done
• IF you create a constructor, you MUST specify the Default Constructor too or it won't exist– Complx( ) { };– no actual code needed inside the { }
![Page 8: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/8.jpg)
Class Constructors
• Assign initial values to an object • Never returns a value• Same name as the class• Guaranteed to be called (automatic) upon
instantiation of an object of type class
![Page 9: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/9.jpg)
Destructors• Automatically run when an object of type
class goes out of scope• use to clean up after the object (return
dynamically allocated storage to the storage management system
• Same name as the class, but preceded by a ~• no overloading allowed• never returns a value• not needed for statically allocated storage
![Page 10: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/10.jpg)
10
C++ console I/O
• basic operators– << the "insertion" operator– >> the "extraction" operator
• stream names for standard I/O– cin is the input "file"– cout is the output "file"
• usage– cin>>x; // get a value– cout<<x; // output a value
![Page 11: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/11.jpg)
11
Operators• Ordinary variables have basic operators built-in
+ - * / % | & || &&
• New objects (structs, classes) may need more• How do you "add" 2 complex numbers?• Given: complex#'s a and b; – what does a+b mean???– compiler knows nothing about complex #'s
• Define a NEW action to perform "+"– but continue to use the "+" operator!!!!– add the real parts, add the imaginary parts– store each result in the proper answer-part.
![Page 12: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/12.jpg)
12
Operators – 2
• Often, we "want" to re-use an operator– i.e.; give a new meaning to "+"– this is called "overloading"
• let "+" mean "add complex numbers"as well as add integers, floats, etc.
• c=a+b; // a, b & c are Complex• May need a "friend" function, due to flaws in the C++
object model• "friend" functions do not get the leading
"classname::" syntax
![Page 13: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/13.jpg)
More on Overloading• = overload this as a member function• == != <= >= <> overload as a non-member
(friend function) returning a boolean• >> << (insertion and extraction) overload
as non-members (friends) returning type iostream
• + - * / % (arithmetic) as overload non-members
• += and -= ... overload same as + and - • cannot overload :: . sizeof ?:
![Page 14: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/14.jpg)
14
Polymorphism (multiple forms)
• x=sqrt(y); // what data type is "y"?– could be: float, int, double, real
• How does compiler know how to handle the incoming data?
• An ADT allows us to create MULTIPLE methods– all have the same name– all have different parameter types– compiler links caller's code & the "right one" based on
parameter types.– Object writer creates these multiple methods
![Page 15: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/15.jpg)
15
Operators
• Ordinary variables have basic operators built-in+ - * / % | & || &&
• New objects (structs, classes) may need more• How do you "add" 2 complex numbers?• Given: Complex#'s a and b; – what does a+b mean???– compiler knows nothing about Complex #'s
• Define a NEW action to perform "+"– add the real parts, add the imaginary parts– store each result in the proper answer-part.
![Page 16: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/16.jpg)
16
Declare the methodsComplx.h
#include <iostream>class Complx{ private:// hidden member data
double my_real_part, my_imag_part; // below are prototypes for the member functions (i.e.; "methods")
public:Complx (double a, double b); // initializing constructorComplx( ) { }; // default constructor
double get_real(Complx); // not shown Complx operator + (Complx); // defines "+" as a non-member function
// define what stream output means for a “Complx” variablefriend std::ostream &operator<<(std::ostream & , const Complx & )
}; // orange: declare parts of the class, green: use it, red: return-value
![Page 17: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/17.jpg)
17
Implement the methods Complx.cpp
#include <iostream> program need to know about “ostream”#include Complx.h program needs to know what the names mean// :: means the name after :: is a member of the class "Complx"Complx :: Complx (double a, double b) // implement constructor
{my_real_part=a; my_imag_part=b;}Complx :: Complx () {} // default constructor ( required because of initializing constructor)Complx Complx ::operator+ (Complx C) // define what “plus” means {Complx tmp; // need a place for output tmp.my_real_part = my_real_part + C.my_real_part; tmp.my_imag_part = my_imag_part + C.my_imag_part; return tmp; }
// define << for a Complx elementfriend std::ostream &operator<<(std::ostream & xout, const Complx &C )
{ xout << C.my_real_part <<"+"<< C.my_imag_part<<"j"; return xout; // actually do the output operation }
![Page 18: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/18.jpg)
18
"friend"s
friend ostream &operator<<(ostream &xout, const Complx &C ) { xout << C.my_real_part <<"+"<< C.my_imag_part<<"j";
return xout; }
• What does it do?• Remember that we needed to define + for complex numbers?• Now need to define how to output them• Output functions don't understand class data• So we have now overloaded:
– the + operator– the << operator
![Page 19: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/19.jpg)
19
"friend"s - pt-2
• Can access private and protected members• NOT a member of the class• Allows operations across multiple classes• << is a member of the iostream class• Want << able to output private data in Complx
![Page 20: Object Oriented Programming C++. ADT vs. Class ADT: a model of data AND its related functions C++ Class: a syntactical & programmatic element for describing.](https://reader035.fdocuments.in/reader035/viewer/2022080915/56649d955503460f94a7e262/html5/thumbnails/20.jpg)
20
Our program to add Complx’s
#include <iostream>#include “Complx.h”using namespace std;void main(){ Complx A(2,2);
Complx B(1,1),C; C=A+B;}