Solved

Why doesn't the compiler see overloaded base class functions?

Posted on 2002-05-15
7
192 Views
Last Modified: 2010-04-02
Why doesn't the compiler see overloaded base class functions? I cannot explain why the follwing is an error:

    #include <string>
    #include <iostream>
    using namespace std;

    class Base
    {
      public:
        virtual void Do( const string& )
        {
          cout << "Base::Do( string )" << endl;
        }
        virtual void Do( const char* const data,
                                  const long length )
        {
          cout << "Base::Do( char*, long )" << endl;
        }
    };

    class Derived : public Base
    {
      public:
        virtual void Do( const int s )
        {
          cout << "Base::Do( int )" << endl;
        }
    };

    int main(int argc, char* argv[])
    {
      Derived d;
      d.Do( 5 );
      d.Do( string() );
      d.Do( "foobar", 6 );
      return 0;
    }

Why doesn't the compiler "see" the base class versions of Do()? The only way I can get this to compile is to qualify the calls by adding "Base::", like so:

    d.Base::Do( string() );
    d.Base::Do( "foobar", 6 );

Can someone explain to me why this is the case? Thanks!
0
Comment
Question by:magenta
7 Comments
 

Author Comment

by:magenta
ID: 7012178
I should have pointed out that the compiler complains about the following lines:

     d.Do( string() );
     d.Do( "foobar", 6 );

It seems to only see the Derived methods.
0
 
LVL 6

Accepted Solution

by:
thienpnguyen earned 50 total points
ID: 7012402
In subclass, if you have a overload funtion that is same name with a fucntion in base class, then that function in base class will be hide .

0
 
LVL 6

Expert Comment

by:thienpnguyen
ID: 7012417
For fixing the bug, you can do as following

class Derived : public Base
{
public:

    using  Base::Do; // <-------- new code

    virtual void Do( const int s )
    {
      cout << "Base::Do( int )" << endl;
    }

};

int main(int argc, char* argv[])
{
  Derived d;
  d.Do( 5 );
  d.Do( string() );
  d.Do( "foobar", 6 );
  return 0;
}
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 6

Expert Comment

by:thienpnguyen
ID: 7012427
0
 
LVL 3

Expert Comment

by:MDarling
ID: 7012450
This is not meant to trample on thienpnguyen's answer.

Just thought I'd post the full listing as I got it to compile on M$ VC6.0.

Nice links Thien! Almost perfect for this question.




#include <string>
#include <iostream>
using namespace std;

class Base
{
public:
     virtual void Do( const string& )
     {
          cout << "Base::Do( string )" << endl;
     }
     virtual void Do( const char* const data,
          const long length )
     {
          cout << "Base::Do( char*, long )" << endl;
     }
};

class Derived : public Base
{
public:
     
     Base::Do;
     
     virtual void Do( const int s )
     {
          cout << "Base::Do( int )" << endl;
     }
};

int main(int argc, char* argv[])
{
     Derived d;
     d.Do( 5 );
     d.Do( string() );
     d.Do( "foobar", 6 );
     return 0;
}
0
 

Author Comment

by:magenta
ID: 7012541
Very intesting...I'm going to have to sit down and read that article. I should probably have the C++ standard nearby...

However, before I do that, answer this question. If a derived class by definition can be treated the same as a base class, then isn't the code above example of this rule being broken?
0
 
LVL 11

Expert Comment

by:griessh
ID: 7178762
Dear magenta

I think you forgot this question. I will ask Community Support to close it unless you finalize it within 7 days. You can always request to keep this question open. But remember, experts can only help you if you provide feedback to their questions.
Unless there is objection or further activity,  I will suggest to accept

     "thienpnguyen"

comment(s) as an answer.
     "refund the points and delete this question"
since nobody had a satisfying answer for you.
since you never gave more feedback.
PAQ at zero points.

If you think your question was not answered at all, you can post a request in Community support (please include this link) to refund your points. The link to the Community Support area is: http://www.experts-exchange.com/commspt/


PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!
======
Werner
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now