Oops Gross Syntax Errors ! Read it as Virtual Void WhoAmI()

TFE
http://totallyfreeenergy.zxq.net

--- In [email protected], "Totally Freeenergy" <totallyfreeene...@...> 
wrote:
>
> My understanding is that a 'Virtual' function will have to be implemented in 
> each derived class. So 
> 
> Class SuperParent{
>  Function WhoAmI : Virtual (){
>    cout << 'I am an object of class SuperParent';
>    }
> }
> 
> Class A_Child : SuperParent {
>  Function WhoAmI (){
>    cout << 'I am an object of class A_Child';
>    }
> }
> 
> Class A_GrandChild : A_Child {
>  Function WhoAmI (){
>    cout << 'I am an object of class A_GrandChild;
>    }
> }
> 
> If you action pointers to these three classes and action the function WhoAmI 
> for each, then you will get the following outcome
> I am an object of class SuperParent
> I am an object of class A_Child
> I am an object of class A_GrandChild
> 
> I don't know if classes that have virtual functions declared in them can 
> infact be instantiated? Common sense says they should not be instantiatable. 
> So many things about C++ are so weird ...
> 
> TFE
> http://totallyfreeenergy.zxq.net
> 
> --- In [email protected], "Saurabh Jain" <hundredrabh@> wrote:
> >
> > --- In [email protected], saurabh jain <hundredrabh@> wrote:
> > >
> > > Hi,
> > >   Can anyone tell what is supposed to be the behaviour for a function 
> > > which is declared as virtual in a base class and non-virtual in derived?
> > > Specially pertaining to cases when you cast the derived object into a 
> > > base class object and call the function.
> > > 
> > > For example:
> > > 
> > > class Base {
> > >   public:
> > >       virtual void foo() { cout << " I am Base foo \n"; }
> > > };
> > > 
> > > class Derived : public Base {
> > >   public:
> > >      void foo() { cout << " I am Derived foo\n";}
> > > };
> > > 
> > 
> > For my first question this is what I understood from the standard:
> > "If a virtual member function vf is declared in a class Base and in a class 
> > Derived, derived directly or
> > indirectly from Base, a member function vf with the same name and same 
> > parameter list as Base::vf is
> > declared, then Derived::vf is also virtual (whether or not it is so 
> > declared) and it overrides95)
> > __________________
> > 95) A function with the same name but a different parameter list (13) as a 
> > virtual function is not necessarily virtual and does not over10.3
> > Virtual functions Derived classes 10– 7
> > Base::vf."
> > 
> > 
> > > And to extend the question what if another class Derived2 is derived from 
> > > class "Derived" with the function foo being declared as non-virtual. 
> > > 
> > For the second question :
> > 
> > "[Note: a virtual member function does not have to be visible to be 
> > overridden, for example,
> > struct B {
> > virtual void f();
> > };
> > struct D : B {
> > void f(int);
> > };
> > struct D2 : D {
> > void f();
> > };
> > the function f(int) in class D hides the virtual function f() in its base 
> > class B; D::f(int) is not a virtual
> > function. However, f() declared in class D2 has the same name and the same 
> > parameter list as
> > B::f(), and therefore is a virtual function that overrides the function 
> > B::f() even though B::f() is
> > not visible in class D2. ]
> > " 
> > 
> > 
> > > Thanks and Regards,
> > > Saurabh
> > > 
> > >  $ make war 
> > > make: *** No rule to make target `war&#39;. Try `peace&#39; instead
> > >
> >
>


Reply via email to