Question: C++ problem: Below is a copy of the problem: Chapter 10 Pointers Part 1 Create an int i with a value of 7. Create a

C++ problem:

Below is a copy of the problem:

Chapter 10 Pointers

Part 1

Create an int i with a value of 7. Create a pointer to integer pi. Point your pointer pi to your int variable i. Print out your pointer, the address of your pointer and a dereference of your pointer.

Create a pointer to your integer pointer ppi. Point it to your pointer to int pi. Print out ppi, the address of ppi, a dereference to ppi and a double dereference to ppi.

Part 2

The essence of the problem is that 2 objects, which should have independent memory storage, accidently wind up sharing memory.

Wrap a character array (and array with 'a','b','c','d','e' is strictly speaking not a string since it does not end in '\0') with a class (this is just a class that contains an array) and then properly(in Deep) and improperly (in Shallow) assign memory.

Make a class WrapArrayDeep that has a private pointer to char. Your default constructor should allocate an array of size 5. You should have a copy constructor that does a deep copy. (allocates a new array)

Your WrapArrayDeep class should start like:

class WrapArrayDeep{

char *pch;

WrapArrayDeep(){

pch = new char[5];

*pch = 97; //etc.

}

WrapArrayDeep(WrapArrayDeep wad){

// correct copy constructor.

}

}

Make a similar class, WrapArrayShallow, that has an improper copy constructor that causes your copy to point to the array in the source object. (instead of making a new array, have pch point to the original array)

Demonstrate the difference between the classes use

WrapArrayDeep wad1, *wad2;

for the variables holding your WrapArrayDeeps and for WrapArrayShallow:

WrapArrayShallow was1, *was2;

Be sure to include a destructor in each class note it must be an ARRAY destructor put a cout in the destructor showing it was called..

In WrapArrayDeep:

Use pointer arithmetic to load your array with ASCII values for letters.

*pca = 97;

*(pca+1) = 98;

etc.

Use array notation to print your array.

for(int I = 0; I < 5; I++)

cout << pca[i] << endl;

In WrapArrayShallow:

Use array notation to load your array with char data.

pca[0]='v';

pca[1]='w';

etc

Use pointer arithmetic to print your array.

for(int I = 0; I < 5; i++)

cout << *(pca + 1) << endl;

Example Output:

this program section uses 3 variables

i = 7, pi a pointer to i and ppi a pointer to pi

pi = 002EF738

dereference pi 7

address of pi 002EF744

address of i 002EF738

ppi = 002EF744

dereference of ppi 002EF738

address of ppi 002EF72C

double dereference of ppi

7

this section instantiates a wrapper class for a dynamic array of 5 elements

WrapArrayDeep 1

a b c d e

WrapArrayDeep 2 created using the copy constructor on 1

a b c d e

after changing the contents of WrapArrayDeep 1, 1 and 3 =

{ | } ~

a b c d e

Now doing the same thing with WrapArrayShallow

wrapArrayShallow 1

a b c d e

wrapArrayShallow 2 created using the copy constructor on 1

a b c d e

after changing the contents of WrapArrayShallow 1, 1 and 3 =

{ | } ~

{ | } ~

calling destructor for WrapArrayShallow

calling destructor for WrapArrayShallow ***** this may or may not work depending on your compiler

calling destructor for WrapArrayDeep

calling destructor for WrapArrayDeep

Press any key to continue . . .

***** If this crashes your program simply remove it.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!