Transcript ppt
Chapter 3
Pointers and Array-Based Lists
Data Structures Using C++
1
Chapter Objectives
• Learn about the pointer data type and pointer
variables
• Explore how to declare and manipulate the pointer
variables
• Learn about the address of operator and
dereferencing operator
• Discover dynamic variables
• Examine how to use the new and delete operators
to manipulate dynamic variables
Data Structures Using C++
2
Chapter Objectives
• Learn about pointer arithmetic
• Discover dynamic arrays
• Become aware of the shallow and deep
copies of data
• Discover the peculiarities of classes with
pointer data members
• Explore how dynamic arrays are used to
process lists
Data Structures Using C++
3
Pointer Data Types and Pointer
Variables
• Pointer variable: variable whose content is a
memory address
• Syntax to declare pointer variable:
dataType *identifier;
• Address of operator: Ampersand, &
• Dereferencing operator: Asterisk, *
Data Structures Using C++
4
Pointers
• Statements:
int *p;
int num;
Data Structures Using C++
5
Pointers
Data Structures Using C++
6
Pointers
Data Structures Using C++
7
Pointers
Data Structures Using C++
8
Pointers
• Summary of preceding diagrams
–
–
–
–
&p, p, and *p all have different meanings
&p means the address of p
p means the content of p
*p means the content pointed to by p, that is
pointed to by the content of memory location
Data Structures Using C++
9
Pointers
Data Structures Using C++
10
Pointers
x = 50;
p = &x;
Data Structures Using C++
11
Pointers
*p = 38;
Data Structures Using C++
12
Classes, structs, and Pointer
Variables
The syntax for accessing a class (struct) member using the operator -> is
pointerVariableName->classMemberName
Therefore, the statement
(*studentPtr).gpa = 3.9;
is equivalent to the statement
studentPtr->gpa = 3.9;
Data Structures Using C++
13
Classes, structs, and Pointer
Variables
Data Structures Using C++
14
Classes, structs, and Pointer
Variables
Data Structures Using C++
15
Syntax to use operator new
new dataType;
new dataType[intExp];
variables
//to allocate a single variable
//to allocate an array of
Data Structures Using C++
16
Syntax to use operator delete
delete pointer;
delete [] pointer;
//to destroy a single dynamic variable
//to destroy a dynamically created array
Data Structures Using C++
17
Operations on pointer variables
• Assignment operations
• Relational operations
• Limited arithmetic operations
Data Structures Using C++
18
Functions and Pointers
void example(int* &p, double *q)
{
.
.
.
}
Data Structures Using C++
19
Pointers and Function Return
Pointers
int* testExp(...)
{
.
.
.
}
is a pointer of the type int.
Data Structures Using C++
20
Shallow Versus Deep Copy and
Pointers
Data Structures Using C++
21
Shallow Versus Deep Copy and
Pointers
Data Structures Using C++
22
Shallow Versus Deep Copy and
Pointers
second = new int[10];
for(int j = 0; j < 10; j++)
second[j] = first[j];
Data Structures Using C++
23
Classes and Pointers: Some
Peculiarities
class pointerDataClass
{
public:
...
private:
int x;
int lenP;
int *p;
};
pointerDataClass objectOne;
pointerDataClass objectTwo;
Data Structures Using C++
24
Classes and Pointers: Some
Peculiarities
Data Structures Using C++
25
Destructor
Data Structures Using C++
26
Destructor
pointerDataClass::~pointerDataClass()
{
delete [ ] p;
}
class pointerDataClass
{
public:
~pointerDataClass();
...
private:
int x;
int lenP;
int *p;
};
Data Structures Using C++
27
Assignment Operator
Data Structures Using C++
28
Assignment Operator
Data Structures Using C++
29
Assignment Operator
Data Structures Using C++
30
Overloading the Assignment
Operator
Function Prototype (to be included in the definition of the class):
const className& operator=(const className&);
Function Definition:
const className& className::operator=(const className&
rightObject)
{
//local declaration, if any
if(this != &rightObject) //avoid self-assignment
{
//algorithm to copy rightObject into this object
}
//return the object assigned
return *this;
}
Data Structures Using C++
31
Overloading the Assignment
Operator
• Definition of function operator=:
– Only one formal parameter
– Formal parameter generally const reference to
particular class
– Return type of function is reference to
particular class
Data Structures Using C++
32
Copy Constructor
Data Structures Using C++
33
Copy Constructor
Data Structures Using C++
34
Copy Constructor
Data Structures Using C++
35
Copy Constructor
• If a class has pointer data members:
– During object declaration, the initialization of one
object using the value of another object would lead to a
shallow copying of the data if the default memberwise
copying of data is allowed
– If, as a parameter, an object is passed by value and the
default member-wise copying of data is allowed, it
would lead to a shallow copying of the data
Data Structures Using C++
36
Copy Constructor
• The copy constructor automatically
executes in the following situations
– When an object is declared and initialized by
using the value of another object
– When, as a parameter, an object is passed by
value
– When the return value of a function is an object
Data Structures Using C++
37
Copy Constructor
Data Structures Using C++
38
Copy Constructor
General syntax to include the copy constructor in the definition of a class:
className(const className& otherObject);
Data Structures Using C++
39
Classes with Pointer Data
Members
• Include destructor in the class
• Overload assignment operator for class
• Include copy constructor
Data Structures Using C++
40
Overloading Array Index
(Subscript) Operator ([ ])
Syntax to declare the operator function operator [ ] as a member of a class
for nonconstant arrays:
Type& operator[](int index);
Syntax to declare the operator function operator [ ] as a member of a class
for constant arrays:
const Type& operator[](int index) const;
Data Structures Using C++
41
Array-Based Lists
• List: A collection of elements of the same
type
• Length of list is number of elements in list
Data Structures Using C++
42
Operations performed on a list
•
•
•
•
•
•
Create the list; initialized to an empty state
Determine whether the list is empty
Determine whether the list is full
Find the size of the list
Destroy, or clear, the list
Determine whether an item is the same as a
given list element
Data Structures Using C++
43
Operations performed on a list
• Insert an item in the list at the specified location
• Remove an item from the list at the specified
location
• Replace an item at the specified location with
another item
• Retrieve an item from the list at the specified
location
• Search the list for a given item
Data Structures Using C++
44
UML Diagram of the class
arrayListType
Data Structures Using C++
45
Time Complexity of List
Operations
Data Structures Using C++
46
Chapter Summary
•
•
•
•
•
•
•
Pointer data types and variables
Dynamic variables
Pointer arithmetic
Dynamic arrays
Shallow and deep copying
Peculiarities of classes with pointer data members
Processing lists
Data Structures Using C++
47