Name:________________________

 

SSN:_________________________

 

Lab section:_________________________

 

 

Page

Possible

Earned

Page

Possible

Earned

1

 

 

7

 

 

2

 

 

8

 

 

3

 

 

9

 

 

4

 

 

10

 

 

5

 

 

11

 

 

6

 

 

Total

 

 

 

 

 

 

CS12 Final

June 16th, 2001

 

 

1.      (2 points) Write a statement that will declare a variable that will contain the address of a pointer to a double.

 

 

 

 

 

 

 

 

2.      Given the declarations

        int * p = new int;

        int * a = new int[10];

 

a.             (2 points) write a statement that will free the memory pointed to by p.

 

 

 

 

 

 

b.             (3 points) write a statement that will free all the memory that a points to.

 

 

 

 

 

3.      Given the declarations

 

        int a[5] = {2,4,6,8,3};

        char word[] = “cat”;

        int * ap = a[1];

        char * cp = word;

        double * s = new double;

        int * p = NULL;

 

(1 point each)What is the type and value of each of the following variables?

 

                              type                                                    value

 

 

 

a[4]    __________________      _________________

 

 

 

ap      __________________      _________________

 

 

 

*ap     __________________      _________________

 

 

 

cp      __________________      _________________

 

 

 

cp[4]   __________________      _________________

 

 

 

s       __________________      _________________

 

 

 

p       __________________      _________________

 

 

 

*p      __________________      _________________

 

 

 

 

 

 

 

 

 

4.      Assume you have two classes declared in your program, A and B.  Class B has a protected data member, int safe.  List two different ways in which class A can gain access to data member safe in class B.   Write the code segment that grants the access, and explain where it would appear in the code.

 

a.        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b.       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

In questions 5-10, please refer to the class declarations below

 

class Parent                        void Parent:: printName()

{                                   {

  public:                              cout << lastname();

    Parent();                       }

    ~Parent();                     

    void printName();               void Parent:: whoAmI()

    void whoAmI();                  }

    virtual void myType();             cout << “I am a Parent\n”;

  protected:                        }

    int stuff;                     

    char lastname[];                void Parent::myType()

  private:                          {

    int hidden;                        cout << “my type is Parent\n”;

};                                  }

 

 

class Daughter : public Parent      void Daughter::whoAmI()

{                                   {

  public:                              cout << “I am a Daughter\n”;

    Daughter();                     }

    ~Daughter();

    void whoAmI();                  void Daughter::myType()        

    virtual void myType();          {

  private:                             cout << “my type is Daughter\n”;

    char girlstuff[];               }

};

 

 

class Son : public Parent           void Son::whoAmI()

{                                   {

  public:                              cout << “I am a Son\n”;

    Son();                          }

    ~Son();

    void whoAmI();                  void Son::myType()            

    virtual void myType();          {

    char gear[];                       cout << “my type is Son\n”;

};                                  }

 

 

5.      (2 point each) True or False?

 

T / F   Son objects have access to data member stuff.

 

T / F   Son objects have access to data member hidden.

 

T / F   Parent objects have access to data member girlstuff.

 

T / F   Parent objects have access to data member gear.

 

T / F   Daughter objects have access to data member gear.

 

6.      (3 points)  List all the data members that are part of a Daughter object.

 

 

 

 

 

 

 

 

 

 

7.      (4 points)  What happens when an object of type Son is declared? (List in the order in which things happen).

 

 

 

 

 

 

 

 

 

 

 

 

 

8.      (3 points) What happens when an object of type Son invokes the method printName()? (List in the order in which things happen).

 

 

 

 

 

 

 

 

 

 

 

 

 

9.      (2 points) What happens when an object of type Son is declared? (List in the order in which things happen).

 

 

 

 

 

 

 

 

 

 


10.   (2 points each)What is the output of the following code segments?

 

a.  Parent * person_1;

    person_1 = new Parent;

    person_1->whoAmI();

 

 

 

 

 

 

b.  Parent * person_2;

    person_2 = new Daughter;

    person_2->myType();

 

 

 

 

 

 

c.  Parent * person_3;

    person_3 = new Daughter;

    person_3->whoAmI();

 

 

 

 

 

 

d.  Parent * person_4;

    person_4 = new Parent;

    person_4->myType();

 

 

 

 

 

 

e.  Son * person_5;

    person_5 = new Son;

    person_5->whoAmI();

 

 

 

 

 

 

 

 

 

 

 


Assume the following declarations for a singly linked list,

 

struct Node

{

    int data;

    Node * next;

};

 

 

and the list pictured below,

 

 

 

 

 

 

 

 

 

 


11.  What does the following code segment do to the list? (explain or draw).

 

Node * temp = p->next;

p->next = new Node;

p->next->data = p->data;

p->next->next = temp;

 

 

 

 

 

 

 

 

 

 


12.  (4 points) What are the two conditions necessary for recursion to work?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13.  Refer to the question on the previous page for Node declarations.  Assume you have a linked list of Nodes, and a pointer, head, pointing to the first node in the list.  Given the function

 

     void Mystery(Node * p)

     {

         if (p != NULL)

         {

             Node * temp = p->next;

             p->next = new Node;

             p->next->data = p->data;

             p->next->next = temp;

             Mystery(temp);

         }

     }

 

 

What does the call Mystery(head) do to the list?

 


14.  (14 points) For each of the statements or code segments below, draw what happens to the list after it is executed.  In each problem, you will be erasing some arrows and adding others.  The problems are independent of each other (new list every time).

 

a.               p = p->next;

 

 

 

 

 

 


b.               p->next = p;

 

 

 

 

 

 


c.                   p = p->next->next;