Können Sie überschreiben privaten definierten Funktionen in einer Basis-Klasse?

Glaube ich, eine derived class können override nur diejenigen Funktionen, die das Erbe der base class. Ist mein Verständnis korrekt.?

Ist, wenn die Basisklasse hat eine öffentliche member-Funktion sagen, func, dann die abgeleitete Klasse kann override die member-Funktion func.

Aber wenn die Basis-Klasse hat ein private-member-Funktion sagen, foo, dann der der abgeleiteten Klasse nicht überschrieben werden können die member-Funktion foo.

Habe ich Recht?

Bearbeiten

Habe ich kommen mit einem code-Beispiel nach dem Studium der Antworten, SO die Mitglieder. Ich erwähne die Punkte, die ich untersucht, wie die Kommentare im code. Hoffe, dass ich rechts bin. Dank

/* Points to ponder:
   1. Irrespective of the access specifier, the member functions can be override in base class.
      But we cannot directly access the overriden function. It has to be invoked using a public
      member function of base class.
   2. A base class pointer holding the derived class obj's address can access only those members which
      the derived class inherited from the base class. */

#include <iostream>

using namespace std;


class base
{
   private:
      virtual void do_op()
      {
         cout << "This is do_op() in base which is pvt\n";
      }

   public:
      void op()
      {
         do_op();
      }
};

class derived: public base
{
   public:
      void do_op()
      {
         cout << "This is do_op() in derived class\n";
      }
};

int main()
{
   base *bptr;
   derived d;

   bptr = &d;
   bptr->op(); /* Invoking the overriden do_op() of derived class through the public 
               function op() of base class */ 
   //bptr->do_op(); /* Error. bptr trying to access a member function which derived class 
                    did not inherit from base class */            

   return 0;
}

InformationsquelleAutor nitin_cherian | 2011-11-12

Schreibe einen Kommentar