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: Object-Oriented Programming
Related Reading: Much of Ch. P and Ch. 1 as well as class notes
Due:
Monday, 5 February 2007, 2:10pm
Please make sure you adhere to the policies on academic integrity.
class Top { public: Top (); int look(); private: int value; void change(int v); }For each of the commented statements below, indicated whether they are legal or illegal.
int main() { Top t; t.value = 3; // legal or illegal? int k = t.look(); // legal or illegal? t.change(3); // legal or illegal? return 0; }
This problem explores access control specifiers, as describe in Chapter~ 1.3 of the text.
Suppose your program contains the following class definition:
class Automobile { public: void setPrice(double newPrice); void setProfit(double newProfit); double getPrice(); private: double price; double profit; double getProfit(); };and assume that the main part of your program contains the following declarations, and that a constructor sets all values to all member variables to some default values.
Automobile hyundai, jaguar; double aPrice, aProfit;For each of the following statements, explain clearly whether it would be legal or illegal based upon the above class definition.
This problem explores variants in argument passing, as described in Ch. P.6 of the text.
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 ... }
For each part of this problem, assume the given lines of code immediately follow the initial block of code given above (however each of the following problems is independent; that is, the code given for part 'i' should not effect part 'ii')
Your goal is to explain the behavior of each code fragment. You are not simply to describe the generated output but must also 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;
b.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;
c.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;
b = a;
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;
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;
b.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;
e->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;
e->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