Object and its encapsulation

Slides:



Advertisements
Similar presentations
Operator Overloading Fundamentals
Advertisements

Dynamic allocation and deallocation of memory: Chapter 4, Slide 1.
CS-1030 Dr. Mark L. Hornick 1 Pointers And Dynamic Memory.
Classes and Objects: Chapter 8, Slide 1 Object and its encapsulation.
Rossella Lau Lecture 8, DCO10105, Semester B, DCO10105 Object-Oriented Programming and Design  Lecture 8: Polymorphism & C++ pointer  Inheritance.
Chapter 15 Memory Management: Four main memory areas for a C++ program: Code: code for instructions, methods, etc. static data: Global variables (declared.
Rossella Lau Lecture 8, DCO10105, Semester B, DCO10105 Object-Oriented Programming and Design  Lecture 8: Polymorphism & C++ pointer  Inheritance.
1 Procedural Concept The main program coordinates calls to procedures and hands over appropriate data as parameters.
Shallow Versus Deep Copy and Pointers Shallow copy: when two or more pointers of the same types point to the same memory – They point to the same data.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes.
CSE 333 – SECTION 4. Overview Pointers vs. references Const Classes, constructors, new, delete, etc. More operator overloading.
Pointer Data Type and Pointer Variables
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes.
CS212: Object Oriented Analysis and Design Lecture 6: Friends, Constructor and destructors.
1 Data Structures - CSCI 102 CS102 C++ Pointers & Dynamic Objects Prof Tejada.
Dynamic Memory Allocation. Domain A subset of the total domain name space. A domain represents a level of the hierarchy in the Domain Name Space, and.
Data Structures Using C++ 2E Chapter 3 Pointers. Data Structures Using C++ 2E2 Objectives Learn about the pointer data type and pointer variables Explore.
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes.
Object Oriented Programming Elhanan Borenstein Lecture #3 copyrights © Elhanan Borenstein.
More C++ Features True object initialisation
Chapter 9 Classes: A Deeper Look, Part I Part II.
OOP in C++ CS 124. Program Structure C++ Program: collection of files Source (.cpp) files be compiled separately to be linked into an executable Files.
CS-1030 Dr. Mark L. Hornick 1 Basic C++ State the difference between a function/class declaration and a function/class definition. Explain the purpose.
Objects and Variables Local variables – Confined to single context: allocated on stack – Primitive types such as int or object references – Must be initialized.
C++ 程序语言设计 Chapter 12: Dynamic Object Creation. Outline  Object creation process  Overloading new & delete.
 2006 Pearson Education, Inc. All rights reserved Classes: A Deeper Look, Part 1.
1 Chapter 15-1 Pointers, Dynamic Data, and Reference Types Dale/Weems.
Design issues for Object-Oriented Languages
Memory Management.
Chapter 2 Objects and Classes
Constructors and Destructors
Dynamic Storage Allocation
Pointers and Dynamic Arrays
Overview 4 major memory segments Key differences from Java stack
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Andy Wang Object Oriented Programming in C++ COP 3330
Object-Oriented Programming (OOP) Lecture No. 45
Constructor & Destructor
Class: Special Topics Copy Constructors Static members Friends this
Pointers Revisited What is variable address, name, value?
This pointer, Dynamic memory allocation, Constructors and Destructor
Dynamic Memory Review what is static, automatic, dynamic variables? why are dynamic(ally allocated) variables needed what is program stack? function.
Chapter 2 Objects and Classes
Dynamic Memory Allocation
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes
Overview 4 major memory segments Key differences from Java stack
Chapter 15 Pointers, Dynamic Data, and Reference Types
Chapter 9 Classes: A Deeper Look, Part 1
Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes
Overview of Memory Layout in C++
Pointers, Dynamic Data, and Reference Types
Dynamic Memory Allocation
Chapter 15 Pointers, Dynamic Data, and Reference Types
Constructors and destructors
Constructors and Destructors
CISC/CMPE320 - Prof. McLeod
Objects Managing a Resource
Class and Objects In a class, all the functions that operate on the data structure are grouped together in one place along with the data Like a struct.
9-10 Classes: A Deeper Look.
Destructor CSCE 121.
Dynamic Memory.
Classes: A Deeper Look, Part 1
Pointers, Dynamic Data, and Reference Types
More C++ Classes Systems Programming.
9-10 Classes: A Deeper Look.
Classes and Objects Object Creation
CSE 333 – Section 5 C++ (1m).
SPL – PS3 C++ Classes.
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Object and its encapsulation Classes and Objects: Object and its encapsulation Chapter 8, Slide 1

Inheritance is facilitated by subclasses (derived classes) Polymorphism is characterized by overloading of names of methods and operators. In C “data containers” can be either in static memory, on the heap, or on the stack. C++ objects can span all three: Consider chapter8_1 program: Chapter 8, Slide 2

Create some global objects: Sample sample ("hey"); Sample sample1("good bye"); Chapter 8, Slide 3

Analyze program chapter8_2 program: Destructor is missing, memory is leaking! Chapter 8, Slide 4

Analyze chapter8_3 program: Constructors and destructors are not inherited from the base class. The base constructor may be invoked implicitly or explicitly. The base destructor will be invoked implicitly. Analyze chapter8_3 program: The program will display hey,Joe and then (the main purpose of this illustration) ~CC() invoked followed by ~C() invoked. Notice the reverse order of destructors called. All C allocators/deallocator can be used in C++. On top of it, there are two new operators -- allocator new (and new[]) and deallocator delete (and delete[]). Chapter 8, Slide 5

The operator new is involved in object creation: When new fails, it either uses new_handler or throws an exception of type bad_alloc. The operator new is involved in object creation: class X { public: X(..) { .... } // constructor .. };//end class X X* ptr; ptr = new X(..); Chapter 8, Slide 6

Placement syntax of the operator new: #include <new> .. class X { public: void* operator new(size_t s,int a1,int a2){ ... } };//end class X int main () { X* ptr = new(1,2) X; return 0; } Chapter 8, Slide 7

Even though destructors cannot be called explicitly, a placement new should have a corresponding “placement” delete (used only when construction fails midway): #include <new> .. class X { public: void* operator new(size_t s,int a1,int a2){ ... } void operator delete(void* p,int a1,int a2){ ... } };//end class X Chapter 8, Slide 8

Analyze chapter 8_4 program: Arrays of objects must be created by new[] using default constructors only! Analyze chapter 8_4 program: They have to be deallocated by delete[] Analyze chapter8_5 program: A few guidelines to make sure that the process memory manager does not get corrupted: Never pass a pointer to free() that has not been returned previously by malloc(), calloc(), or realloc(). Deallocate segments allocated by malloc(), calloc(), and realloc()}} using exclusively free(). Chapter 8, Slide 9

Deallocate segments allocated by new using exclusively delete. Never pass a pointer to delete that has not been returned previously by new. Deallocate segments allocated by new using exclusively delete. Never pass a pointer to delete[] that has not been returned previously by new[]. Deallocate segments allocated by new[] using exclusively delete[]. If your program uses placement-new, it should have a corresponding placement-delete, even though it will be only called implicitly by the compiler when an exception is thrown during the construction of an object. Chapter 8, Slide 10

Analyze chapter8_6 program: Copy constructor: Analyze chapter8_6 program: The will work fine displaying hey Joe on the screen. The object c created in main() using constructor C(char*) will be copied to the activation frame of doit() using the copy constructor C(const C&). When doit() terminates, the object d --- as built in the activation frame of doit() --- is destructed using ~C(). Without the copy constructor (the memberwise copy constructor would have been used), the program would have crashed, as no “deep” copy of the salutation would have been provided, yet ~C() would still try to deallocate it. Chapter 8, Slide 11

Assignment operator --- operator= This method specifies how to perform assignments of type o1=o2 between two objects (which is in a sense again a form of copying, from o1 to o2). In the absence of an explicit assignment, the memberwise assignment is performed. The same problems may ensue as discussed for the missing copy constructor. However, a missing assignment is even more dangerous as it can lead to memory leaks: class C { ... };//end class C int doit() { C c1("hey Joe"), c2; c1=c2; return 0; } //end doit Chapter 8, Slide 12

The difference between copy and assignment results from the c1 is created and c1.salutation points to a dynamically created string "hey Joe". c2 is created using the default constructor and hence the value of c2.salutation is set to NULL. When c1=c2 assignment is performed, due to the absence of an explicit assignment method in the definition of the class C, the memberwise copy is performed and thus c1.salutation is set to NULL. When c1 and c2 are destructed, none of them is “linked” to the string "hey Joe" and so the string is never deallocated and “leaks”. The difference between copy and assignment results from the fact that the copy is concerned with “forming the raw memory into an object” while the assignment must deal with a “well-constructed object’”, thus in essence the assignment must de-construct the object before it can do the copying: Analyze chapter8_7 program: Chapter 8, Slide 13

End of slides for chapter 8 Chapter 8, Slide 14