| re: Polymorphism
Senthil wrote:[color=blue]
> Hi,
> In the following code..
>
> #include<iostream>
>
> using namespace std;
>
> struct game{
> virtual void play()
> {
> cout<<"unknown"<<endl;
> }
> };
>
> struct tennis :public game{
> void play()
> {
> cout<<"tennis"<<endl;
> }
> };
>
> void Val(game b)
> {
> b.play();
> }
>
> int main()
> {
> game *pt=new tennis;
> pt->play(); // prints tennis------------>1[/color]
Correct via base class of tennis object pointed to by pt[color=blue]
> (*pt).play(); // prints tennis ---------> 2[/color]
Correct via base class of tennis object dereferenced from pointer pt[color=blue]
> Val(*pt); // prints unknown ----------> 3[/color]
Correct base clase object passed by value hence no longer part of a
descendant class,(note if it is passed by reference, which I prefer,
tennis would be printed).[color=blue]
>
> return 0;
> }
>
> The line marked with 1, prints "tennis", I understand.
> I expected 2 and 3 to print "unknown" , but 2 prints "tennis" and 3
> prints "unknown".
> In both the cases i am invoking the method on a object(not on a pointer
> or reference) and i do not expect a polymorphic behaviour.
> Is my understanding wrong?
>
> Thanks,
> Senthil
>[/color]
JB |