On May 17, 10:49 pm, Christian Hackl <ha...@sbox.tugraz.at> wrote:
> timid wrote:
> > #include <iostream>
>
> > class Fruit
> > {
> > public:
> > virtual const char* get_name() {return "(nothing)";}
>
> Use std::string rather than char*.
>
> Also, a function such as "get_name" should usually be declared const.
>
>
>
> > };
>
> > class Apple: public Fruit
> > {
> > public:
> > const char* get_name() {return "Apple";}
> > };
>
> > class Orange: public Fruit
> > {
> > const char* get_name() {return "Orange";}
> > };
>
> > int main()
> > {
> > std::cout << "Test inheritation" << std::endl;
>
> > Fruit *myfruit1 = new Apple();
> > Fruit *myfruit2 = new Orange();
> > Fruit *myfruit3 = new Apple();
>
> > [...]
>
> > // The following does not work
> > std::cout << "Now change myfruit3 from Apple to Orange..." <<
> > std::endl;
> > *myfruit3 = *myfruit2;
>
> * derefences the pointer, yielding the object it's pointing to.
> Consequently, in your example you don't assign the _pointers_, you
> assign the _objects_ they are pointing to. That's a huge difference.
> Assigning an Orange to an Apple obviously does not do anything because
> you did not specify anything to happen in case of such an assignment.
> The invisible assignment operator automatically generated by the
> compiler is empty. In other words, the Apple is completely unaffected by
> the operation.
>
> If you want to assign a pointer to another pointer, you have to write:
>
> myfruit3 = myfruit2;
>
> However, in your program this would have disastrous results because you
> would lose the old value of myfruit3, which means you cannot delete your
> second Apple anymore. (You'd have to save the old value somewhere, for
> example in a temporary pointer variable.)
>
> What do you try to achieve by having myfruit3 point to a different object?
>
> --
> Christian Hackl
Thank's for the help so far, it would appear that I need to learn a
lot more.
I'm going to try & rewrite this program so it'll work.
|