Groups | Blog | Home
all groups > dotnet clr > july 2007 >

dotnet clr : Accessing base class method using derived class object



srini4vasan NO[at]SPAM gmail.com
7/26/2007 4:54:38 AM
#include<iostream>
using namespace std;

class A
{
public:
void display()
{
cout<<"A display"<<endl;
}

};

class B : public A
{
public:
void display()
{
cout<<" B display "<<endl;
}
};

int main()
{
B b1;
b1.display();

return 0;
}

In this program can you please tell me how can i access base class
method ie.,display() using derived class object.ie.,b1.

A single line has to be included in this main funtion.
Phill W.
7/27/2007 12:53:34 PM
[quoted text, click to view]

Sounds decidedly home-work-ish to me, but what the hey...


/If/ B.display() shadows A.display(), i.e. there's no overriding
involved - my C++ is a /little/ rusty ;-) - then you can do this
directly.
Simply tell ("up-cast") 'B' to behave as if it were an 'A'.

((A)b1).display();

However, if B.display() /overrides/ A.display() - don't think this is
the case, but just for completeness - then you're stuck.
Unless you expose an alternative method on 'B' that calls the base
implementation in 'A', then you can't access the base implementation in
A; and that's as it should be.

HTH,
Ben Voigt [C++ MVP]
8/2/2007 12:36:04 PM

[quoted text, click to view]

There's no "virtual", so no dynamic dispatch. Calling through a reference
to A will call the base implementation.

[quoted text, click to view]

AddThis Social Bookmark Button