Saint Louis University |
Computer Science 180
|
Dept. of Math & Computer Science |
Our goal of this homework is to review some of the subtleties of object-oriented programming in C++, as seen in our walkthrough of the credit class and our "Objects Demo"
Topic: C++ Object Models
Related Reading: Section 8 of Transition Guide and
Ch. 1.1.3, 1.4.1, 1.5.2 of text.
Due:
Friday, 6 February 2009, 10:00am
Please make sure you adhere to the policies on academic integrity.
Draw a diagram such as the one shown below, to portray the underlying memory configuration that might exist after the completion of the following series of commands (you may assume that one cell of memory is sufficient for storing a character or a pointer).
char a = 'X'; char b = 'Y'; char *c = &b; char d(a); char &e(a); char *f = c; char *g = new char('Z');
Based upon your solution in the first diagram, give a second diagram that portrays the updated configuration after the following additional commands.
*f = 'W'; c = g; e = b;
This problem explores variants in argument passing. What (if anything) is different about the behavior of the following three functions f(), g() and h()?
void f(int x) { x = x + 1; cout << x; } void g(int& x) { x = x + 1; cout << x; } void h(const int& x) { x = x + 1; cout << x; }
This problem explores static vs. dynamic allocation of objects and the use of the assignment operator and copy constructor. Most of this material is covered in some form as part of of Ch. P.5 of the text.
Assume that we begin with the definition of a basic Thing class (similar to the one which we saw in class, but without all the extraneous chatter), and then the following declarations within the main function:
#include <iostream> #include <string> using namespace std; class Thing { private: string book; public: Thing(string initialBook = "Cat in the Hat") : book(initialBook) { } string getBook() const { return book; } void setBook(string bk) { book = bk; } }; int main() { Thing a; Thing b("Snow"); Thing c(b); Thing *d = &c; Thing *e = new Thing(); Thing *f = new Thing(b); // ... more to come ... }
To begin, we want you to draw a diagram using a style similar to
examples in class on the blackboard, showing the underlying memory
configuration that results from the above statements. Although
you could experiement with such code on a computer, you are
welcome to do this as a hypothetical. To get you going, here is
the style of picture that we'd have in mind after the first
two declaration.
Note that the "memory address" we give on the right have no basis
in reality. The actual addresses and the placement of the objects
would be system dependent (and typically would be displayed in
hexadecimal).
And now, onto the real problem.
Complete the memory diagram to reflect the state of affairs after all six of the original declaration statements above.
Then predict the output that would be given at this point by the
following code fragment. Do not simply give the generated output,
but explain why such output is generated.
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
For each subsequent part of this problem, consider the new line of code as if it were executed immediately following the initial block of code given above (that is, do not let the code from part ii affect your answer to part iii, etc.).
b.setBook("Hop on Pop");and then explain what output would be generated by the following.
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
c.setBook("Hop on Pop");and then explain what output would be generated by the following.
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
a = b;and then explain what output would be generated by the following.
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
b = a;and then explain what output would be generated by the following.
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
b = a;and then explain what output would be generated by the following.
a.setBook("Hop on Pop");
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
e = d;and then explain what output would be generated by the following.
d->setBook("Hop on Pop");
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
*e = *d;and then explain what output would be generated by the following.
d->setBook("Hop on Pop");
cout << a.getBook() << endl;
cout << b.getBook() << endl;
cout << c.getBook() << endl;
cout << d->getBook() << endl;
cout << e->getBook() << endl;
cout << f->getBook() << endl;
TBA