1 / 27

Object Oriented Programming Dr. Alon Schclar

Object Oriented Programming Dr. Alon Schclar. Based on slides by Elhanan Borenstein (now at Stanford http://www.stanford.edu/~ebo/). Lecture #2. Agenda. Classes & Objects Definition & Motivation Data Members Data Members vs. Function variables Private & Public Permissions

trilby
Download Presentation

Object Oriented Programming Dr. Alon Schclar

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. Object OrientedProgrammingDr. Alon Schclar Based on slides by Elhanan Borenstein (now at Stanford http://www.stanford.edu/~ebo/) Lecture #2

  2. Agenda • Classes & Objects • Definition & Motivation • Data Members • Data Members vs. Function variables • Private & Public Permissions • Objects as Data Members • Pointers to Objects • Methods (Member Functions) • Member Functions vs. Global Functions • The “this” Pointer • Working with Files • Object Size and Local Objects

  3. Classes & Objects

  4. Classes & Objects Introduction • A class represents a data entity. • Classes could (and should) be regards as new types, just like the fundamental types: int, float, char, etc. • Each class defines: • Data Members - The data we want to store. • Methods (member functions) - The operations that could be applied to this data. • The application will define/create various Objects according to the available classes. It will then be able to assign values to its data members and activate its methods.

  5. Classes & Objects Definition • A class is defined (declared) and used as follows: class MyClass{ [private:] variables (data members) … functions (methods) … public: variables (data members) … functions (methods) …}; void main(){ // define objects of type // class_name MyClass MyObject1; MyClass MyObject2; // call a member function MyObject1.func1(…); // assign value to data members MyObject1.Index = 12;}

  6. Classes & Objects Example – CPoint • The class CPoint represents a point in the 2D space… class CPoint { int m_x , m_y; public: void Init() { m_x = 0; m_y = 0; } void Set(int ax, int ay) { m_x = ax; m_y = ay; } void Print() { cout<<"x = "<<m_x<<", y = "<<m_y<<endl; } }; #include <iostream.h> void main() { CPoint p1, p2; p1.Init(); p2.Set(4,6); p1.Print(); p2.Print(); } How to merge Init and Set?

  7. Data Members Data Members vs. Function variables • Member functions “know” all the data members of the same object. • When activating a member function of an object, it can operate on the data member of that object. • Equivalent to sending the “struct” part to the function • Short parameter lists • Unlike local variables (that “lives” only until the function terminates) the data members are alive as long as the object is alive.

  8. Data Members Private and Public Permissions • Members (data & functions) can have either a public or a private permission. • Public members can be accessed at any point in the code (if you have access to the object they are in). • Private members can be accessed only by member functions of that class. • The permissions can be set using the keywords “public:” and “private:” and will apply until the next occurrence of public:/private: .

  9. Data Members Private and Public Permissions • The default permission of a class is private. • Permissions can be altered as many time as we want. • Conventions: • Default: Private(functions,variables), Public(functions,variables) • Public(functions,variables), Private(functions,variables) • Varibles(public/private), Functions(public/private) • Functions(public/private) , Varibles(public/private)

  10. Data Members Why Private? • Prohibitingdirect access to the data members by a programmer using the class. • But why? (encapsulation, modularity, safety) • Example : CPoint (p. 40) • Rule: • There should be a good reason to define data member as public. • There is usually no such reason!!!! • So, how can we access private data members? • Get and Set functions… • ByRef return value… (not recommended)

  11. Classes vs. Structs Formal • A struct is a class whose default permission is public (reminder: the default permission in a class is private). • Thus: • struct { private: … } is equivalent to class { …} • class { public: …} is equivalent to struct { … } In Practice • The use of structs in C++ is scarce. • They will be mainly used to define data collections with no methods (very similar to their usage in C).

  12. Objects as Data Members • Data members can also be: • Objects • Array of objects Example: CTriangle (p. 41) • Pointers to objects

  13. Objects as Function arguments • Note: When sending an object as a function argument: • It is preferred to send it ByRef (efficiency). • If the function should not change the object – add “const”. (We actually did the same in C, sending pointers to structures instead of the struct itself)

  14. Pointers to Objects • In an analogue manner to the definition of pointers to fundamental data type in C (i.e. int *pIndex), we can define pointers to objects (i.e. CPoint *pMyPoint). • Important: Pointers to objects do not necessarily represent real objects. We should: • Assign it with a pointer to an existing object, or… • allocate a new object to this pointer. • Example: pmain (p. 44) • What about memory allocation and freeing of data members? • Constructors and destructors • Mutual pointers • Example: Gardens and Gardeners (p.42)

  15. Methods (Member Functions) Member Functions vs. Global Functions • Member functions (methods) • represents the services each class offers. • operate on the data members of the object • can be access only through the object. • encapsulation • modularity • Global functions will be used for general purpose operations that can not be assigned to any specific class. • examples? • Naming conventions: function and variable

  16. Methods (Member Functions) Using the pointer “this” • Inside a member function we operate on a specificobject (the one which activated the function), although, we do not know its name. • Unlike a global function – access via the variable name • Wht to do when we need to refer to the whole object? • Sending the object to a different function… • Returning the object as return value… • Use the pointer “this”, • Reserved word • Points to the operating object. • Example: this (p.45)

  17. Methods (Member Functions) External Function Implementation • Functions that are being implemented inside the class definition are automatically defined as inline functions. • Loops or otherwise complicated functions are notappropriate. • Inline function should be used only for simple functions • Most functions should be implemented externally. • Within the class definition we shall only include their prototypes. • To indicate that a function implementation is a member function, we can use the scope resolution operator“::”

  18. Methods (Member Functions) Working with Multiple Files • Most classes will be implemented in two files: • header file (.h) – class definition: data members and prototypes. • code file (.cpp) – a collection of function implantations. main.cpp cpoint.h cpoint.cpp #include “cpoint.h” #include “ctriangle.h” … void main() { CPoint P1; … } class CPoint { int m_x , m_y; public: void Init(); bool Set(int ax, int ay); void Print(); int GetX() { return m_x; } int GetY() { return m_y; } }; #include “cpoint.h” void CPoint::Init() { … } bool CPoint::Set(int ax, int ay) { … } … class CPoint { int m_x , m_y; public: void Init(); bool Set(int ax, int ay); void Print(); int GetX() { return m_x; } int GetY() { return m_y; } }; #include “cpoint.h” void CPoint::Init() { … } bool CPoint::Set(int ax, int ay) { … } … class CPoint { int m_x , m_y; public: void Init(); bool Set(int ax, int ay); void Print(); int GetX() { return m_x; } int GetY() { return m_y; } }; #include “cpoint.h” void CPoint::Init() { … } bool CPoint::Set(int ax, int ay) { … } …

  19. A Few Notes about Objects Object Size • The object size is the sum of all sizes of its datamembers. (member functions do not effect the object size). Why? • The operator sizeof can be applied to both classes and objects: sizeof(CPoint)  sizeof(int + int) sizeof(P1)  the same sizeof(CTriangle)  sizeof(CPoint + CPoint + CPoint ) sizeof(T1)  the same

  20. A Few Notes about Objects Local Object • Local objects (which were defined within a function), die when the function terminates (just like a local variable). • Local objects can be used though as ByVal return-values (since a copy of it will be created on the stack). Global Objects • Objects which are defined externally to the main function will be global objects (just like global variables). • Created before main • deleted only after the main function terminates.

  21. Strings in C • Should be used in EX2 • Not intuitive • strcpy instead of = • May overwrite after target • strcmp instead of == • strcat instead of + • C++ : the class string • Fixes all the above and more …

  22. C++ string class • Replaces C character arrays • How to declare ? • string str; // Empty string • string str(s); OR String str = s • Initializes to s(string or char array) • str will contain a copy of s • string str (charArr, n); • Initializes str to contain a copy of the first n characters of charArr Based on slides from http://www.cs.niu.edu/~abyrnes/

  23. C++ string class – stdin i/o • Reading a string from stdin • cin >> str; • Skips leading whitespace and reads nonwhite characters up to the next white space. • getline(cin, str); • Gets characters from cin into str until a newline character OR end of file is reached • getline(cin, str, delimiter); • From cin into str until the delimiter is found (not stored in str) OR end of file is reached • Printing a string • cout << str; Based on slides from http://www.cs.niu.edu/~abyrnes/

  24. C++ string class • Assignment • str = val; • Assigns a copy of val to str. • Concatenation • str + val; OR val + str; • concatenates str and value, • str += value; • Appends a copy of value to str. • val may be a string, char array, or char Based on slides from http://www.cs.niu.edu/~abyrnes/

  25. C++ string class • Relational Operators • str < s str <= s • str > s str >= s • str == s str != s • s may be a string or char array • Content access • str[p] or str.at(p) • returns a reference to the character stored in strat position p Based on slides from http://www.cs.niu.edu/~abyrnes/

  26. C++ string class – common methods • str.length() • returns the number of characters in str • str.substr(p, n) • returns a copy of a sub-string n characters long, starting at position p • str.c_str() • converts the string object str to a null terminated char arrayreturns: const char * Based on slides from http://www.cs.niu.edu/~abyrnes/

  27. Exercise • A dynamic array- A special case of container • Snake • All based on examples by Amir Kirsh • http://www2.mta.ac.il/~amirk/cpp/programs/ • The presented examples contain minor changes • Strings

More Related