Calling Operators from Member Functions








  PRODUCT  :  C++                                    NUMBER  :  638
  VERSION  :  All
       OS  :  PC DOS
     DATE  :  August 12, 1992                          PAGE  :  1/2

    TITLE  :  Calling Operators from Member Functions




  The following provides examples  of  different  ways to invoke an
  operator,  how  to  call  such  operators  from  within a  member
  function and deals with some related multiple inheritance issues.

  You can always invoke an operator by name. For example, given:

                 X_Class {
                 ...
                   public:
                     X_Class &operator +( X_Class y);
                 };

                 X_Class  x, y;

  the function for the + operator can be invoked in several ways:

                 x + y;
                 x.operator +(y);

  We  can think of the second example in this way: not only have we
  overloaded  the  +  operator  to  add together instances  of  the
  X_Class, we also created a member function of  the  X_Class whose
  name is operator +.

  If X_Class has a member function foo, and we want  to  call the +
  operator from  within  it,  we  would  do  it by using its member
  function name:

                 X_Class::foo(X_Class &y) {
                   ...
                   operator +(y);
                   ...
                 }

  If one is dealing with multiple inheritance, and  operator  + has
  been redefined in several different  classes,  one  might  get an
  ambiguity at some point.  To resolve this, or any other ambiguity
  the  compiler  faces  when  it  cannot  determine  which  of  the
  overloaded  functions  it  must  use,  you can qualify  a  member
  function name with its class name.  For example suppose we have:
















  PRODUCT  :  C++                                    NUMBER  :  638
  VERSION  :  All
       OS  :  PC DOS
     DATE  :  August 12, 1992                          PAGE  :  2/2

    TITLE  :  Calling Operators from Member Functions




                           A     B
                            \   /
                              C

  and there is a public A & operator +( int )  defined  for  both A
  and B, and both  A and B are inherited publicly into C. Then

                           A ans;
                           C c1;

                           ans = c1 + 4;

  will be ambiguous.  It can be resolved by going,

                      ans = c1.B::operator +(4); or

                      ans = c1.A::operator +(4);

  depending  on which one you wanted to use.  This is because :: is
  the  scope  operator.   It is used to specify which scope a given
  symbol comes from.

  DISCLAIMER: You  have the right to use this technical information
  subject to the terms  of  the  No-Nonsense License Statement that
  you received with  the  Borland product to which this information
  pertains.























Comments

Popular posts from this blog

BOTTOM LIVE script

Fawlty Towers script for "A Touch of Class"