1 / 85

C++ Programming: From Problem Analysis to Program Design, Fourth Edition

C++ Programming: From Problem Analysis to Program Design, Fourth Edition. Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes. Objectives. In this chapter, you will: Learn about the pointer data type and pointer variables

bmorton
Download Presentation

C++ Programming: From Problem Analysis to Program Design, Fourth Edition

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. C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes

  2. Objectives In this chapter, you will: • Learn about the pointer data type and pointer variables • Explore how to declare and manipulate pointer variables • Learn about the address of operator and the dereferencing operator • Discover dynamic variables C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  3. Objectives (continued) • Explore how to use the new and delete operators to manipulate dynamic variables • Learn about pointer arithmetic • Discover dynamic arrays • Become aware of the shallow and deep copies of data • Discover the peculiarities of classes with pointer member variables C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  4. Objectives (continued) • Learn about virtual functions • Examine the relationship between the address of operator and classes • Become aware of abstract classes C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  5. Pointer Variables • Pointer variable: content is a memory address • Declaring Pointer Variables: Syntax Examples: int *p; char *ch; identifier

  6. Pointer Variables (continued) • These statements are equivalent int *p; int* p; int * p; • In the statement int* p, q; only p is the pointer variable, not q; here q is an int variable • To avoid confusion, attach the character * to the variable name int *p, q; • The following statement declares both p and q to be pointer variables of the type int. int *p, *q;

  7. Address of Operator (&) • The ampersand, &, is called the address of operator • The address of operator is a unary operator that returns the address of its operand C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  8. Dereferencing Operator (*) • C++ uses * as the binary multiplication operator and as a unary operator • When used as a unary operator, * • Called dereferencing operator or indirection operator • Refers to object to which its operand (that is, a pointer) points

  9. The following statement prints the value stored in the memory space pointed to by p, which is the value of x. It will print 25 The following statement stores 55 in the memory location pointed to byp—that is, in x. 1300 1300 55 P x 1200 1300 P x 1200 1300 25

  10. &p, p, and *p all have different meanings. • &p means the address of p—that is, 1200 • p means the content of p (1800). • *p means the content (24) of the memory location (1800) pointed to by p (that is, pointed to by the content of memory location 1200).

  11. Example 14-1 1750 50 38 &p= 1400 P= ??? *p= Undefined &x= 1750 X= 50 &p= 1400 P= 1750 *p= 50 &x= 1750 X= 50 &p= 1400 P= 1750 *p= 38 &x= 1750 X= 38 &p= 1400 P= ??? *p= Undefined &x= 1750 X= ???

  12. More About Pointers • A declaration such as • int *p; • allocates memory for p only, not for *p. • 2. Assume the following: • int *p; • int x; Then, • a. p is a pointer variable. • b. The content of p points only to a memory location of type int. • c. Memory location x exists and is of type int. Therefore, the assignment statement • p = &x; • is legal. After this assignment statement executes, *p is valid and meaningful.

  13. Classes, Structs, and Pointer Variables • You can declare pointers to other data types: • student is an object of type studentType; studentPtr is a pointer variable of type studentType C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  14. Classes, Structs, and Pointer Variables (continued) • To store address of student in studentPtr: studentPtr = &student; • To store 3.9 in component gpa of student: (*studentPtr).gpa = 3.9; • () used because dot operator has higher precedence than dereferencing operator • Alternative: use member access operator arrow (->) C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  15. Classes, Structs, and Pointer Variables (continued) • The syntax for accessing a class (struct) member using the operator -> is: • Thus, (*studentPtr).gpa = 3.9; is equivalent to: studentPtr->gpa = 3.9; C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  16. Initializing Pointer Variables • C++ does not automatically initialize variables • Pointer variables must be initialized if you do not want them to point to anything • Initialized using the constant value 0 • Called the null pointer • Example: p = 0; • Or, use NULL named constant: p = NULL; • The number 0 is the only number that can be directly assigned to a pointer variable C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  17. Dynamic Variables • Dynamic variables: created during execution • C++ creates dynamic variables using pointers • Two operators, new and delete, to create and destroy dynamic variables • new and delete are reserved words C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  18. Operator new • new has two forms: • where intExp is any expression evaluating to a positive integer • new allocates memory (a variable) of the designated type and returns a pointer to it • The address of the allocated memory • The allocated memory is uninitialized C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  19. Operator new (continued) • The statement: p = &x; • Stores address of x in p • However, no new memory is allocated • The statement: p = new int; • Creates a variable during program execution somewhere in memory, and stores the address of the allocated memory in p • To access allocated memory: *p C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  20. Think about pointer of characters???

  21. Operator new (continued) • new allocates memory space of a specific type and returns the (starting) address of the allocated memory space • If new is unable to allocate the required memory space, it throws bad_alloc exception • If this exception is not handled, it terminates the program with an error message C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  22. Operator delete C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  23. Memory leak Operator delete (continued) C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  24. Operator delete (continued) • To avoid memory leak, when a dynamic variable is no longer needed, destroy it-----Deallocate its memory • delete is used to destroy dynamic variables • Syntax: • Tip: to avoid dangling pointers, set variable to NULL afterwards P 12 1200 1300 1300 Now 1300 is available to be used later on… P 1200 1300 1300 P 1200 NULL C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  25. Operations on Pointer Variables • Assignment: value of one pointer variable can be assigned to another pointer of same type • Relational operations: two pointer variables of same type can be compared for equality, etc. • Some limited arithmetic operations: • Integer values can be added and subtracted from a pointer variable • Value of one pointer variable can be subtracted from another pointer variable C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  26. Operations on Pointer Variables (continued) • Examples: int *p, *q; p = q; • In this case, p == q will evaluate to true, and p != q will evaluate to false int *p double *q; • In this case, q++; increments value of q by 8, and p = p + 2; increments value of p by 8 p q C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  27. Operations on Pointer Variables (continued) • Pointer arithmetic can be very dangerous • The program can accidentally access the memory locations of other variables and change their content without warning • Some systems might terminate the program with an appropriate error message • Always exercise extra care when doing pointer arithmetic C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  28. stores 25 into the first memory location stores 35 into the first memory location Dynamic Arrays • Dynamic array: array created during the execution of a program • Example: int *p; p = new int[10]; *p = 25; p++; //to point to next array component *p = 35; p 1000 1004 1036 C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  29. p 1000 1004 1008 1036

  30. Dynamic Arrays (continued) • C++ allows us to use array notation to access these memory locations • The statements: p[0] = 25; p[1] = 35; store 25 and 35 into the first and second array components, respectively C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  31. Dynamic Arrays (continued) • The value of list (1000) is constant • Cannot be altered during program execution • The increment and decrement operations cannot be applied to list • If p is a pointer variable of type int, then: p = list; copies the value of list, the base address of the array, into p • We can perform ++ and -- operations on p • An array name is a constant pointer C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  32. Functions and Pointers • A pointer variable can be passed as a parameter either by value or by reference • To make a pointer a reference parameter in a function heading, use &: void example(int* &p, double *q) { . . . } C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  33. Pointers and Function Return Values • A function can return a value of type pointer: int* testExp(...) { . . . } C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  34. 5 10 5 5 10 10 5 10 273185792

  35. 5 10 8 8 10 10 10

  36. declares board to be an array of four pointers wherein each pointer is of type int creates the rows of board declares board to be a pointer to a pointer Dynamic Two-Dimensional Arrays • You can create dynamic multidimensional arrays • Examples: C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  37. This statement creates an array of10pointers of typeintand assign the address of that array toboard. • This forloop creates the columns ofboard. • To access the components ofboardyou can use the array subscripting notation. 0 1 14 . . . . board 0 1 9 . . . . . . . . . . . . . . .

  38. Examples P1 0012FF7C P2 0012FF78 10 20 X 0012FF74

  39. ptr2 ptr1 p2 p3 p1 x y z 3 4 5 10 20 5 0 0 0

  40. Shallow versus Deep Copy and Pointers • Assume some data is stored in the array: • If we execute: C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  41. Shallow versus Deep Copy and Pointers (continued) • Shallow copy: two or more pointers of the same type point to the same memory • They point to the same data C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  42. Shallow versus Deep Copy and Pointers (continued) • Deep copy: two or more pointers have their own data C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  43. Classes and Pointers: Some Peculiarities • There are three things to take care when the class uses pointer members: • Destructor to delete the dynamic array • Overload the assignment operator • Override the Copy constructor C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  44. Destructor • If objectOne goes out of scope, the member variables of objectOne are destroyed • The memory space of the dynamic array would stay marked as allocated, even though it cannot be accessed C++ Programming: From Problem Analysis to Program Design, Fourth Edition

  45. Destructor (continued) • Solution: • Put the necessary code in the destructor to ensure that when objectOne goes out of scope, the memory of the array is deallocated C++ Programming: From Problem Analysis to Program Design, Fourth Edition

More Related