Suppose we have the following class: class C { /* */ public: int foo (); int bar (); }; ... Also suppose that this class is only available in compiled form, i.e., that it cannot be modified. Now we want to add an alternative implentation that only has a method foo() but that does not have a method bar () and does not inherit the data members from class C. I.e., this new class D would have the structure class D /* ... */ { public: int foo (); }; but it cannot inherit from class C. Suppose we want to maintain a list of objects that can be from either classes C or D. Explain how you can design this list data structure, traverse the list, and call foo() on each element, such that the appropriate method C::foo() or D::foo() is executed depending on the type of the object. Do not use either if-statements or structural subtyping. Hint: There are at least three possible solutions; each one requires you to define two or more classes in addition to the list class.
* See attatched photo
Suppose we have the following class: class C { /* ... */ public: int foo (); int bar (); }; Also suppose that this class is only available in compiled form, i.e., that it cannot be modified. Now we want to add an alternative implentation that only has a method foo() but that does not have a method bar() and does not inherit the data members from class C. I.e., this new class D would have the structure class D /* ... */ { public: int foo (); }; but it cannot inherit from class C. Suppose we want to maintain a list of objects that can be from either classes C or D. Explain how you can design this list data structure, traverse the list, and call foo() on each element, such that the appropriate method C::foo() or D::foo() is executed depending on the type of the object. Do not use either if-statements or structural subtyping. Hint: There are at least three possible solutions; each one requires you to define two or more classes in addition to the list class.
Trending now
This is a popular solution!
Step by step
Solved in 6 steps with 5 images