      C++  367

     
          
          
            - 
             
                - 
                 - 
                  
                 
                  
                 
                   
                  
                new 
                  delete 
                    new   
       
         
         operator=    
      - 
         
            
            
      388
         
         390
    
         - 
         
           	
           
          	
         fast this 
      
        

    422

      C++     .     
     ,       
 . 
      friend     . 
             . 

    14:	class Buddy { 
    15:	private: 
    16:	   Pal palObject;	//	   Buddy 
    17:	public: 
    18:	   void ShowValues(void);	//	   
    19:	}; 

    29:	void Buddy::Showvalues(void) 
    30:	{ 
    31:		Pal aPal(1234);  ?
    32: 
    33:		cout  "\nBefore, palObject.x	=="  palObject.x; 
    34:		palObject.doublex( ) ; 
    35:		cout  "\nAfter, palObject.x	=="  palObject.x; 
    36:		cout  "\naPal.x == "  aPal.x  "\n'; 
    37:	} 


         
             ,   
 -,      
   

    class lass;	//     

    class AClass { 
        friend class BClass;    // BClass      AClass 
        ... //    
     }; 

    class BClass { 
       friend class AClass;    // AClass      BClass 
                                             // ...  ; 
     };


         C++   . 
         -,  
  "" .      
      ,   . 

Show -    !

    21: main() 
    22: { 
    23:    One c1; 
    24:    Two c2; 
    25: 
    26:    Show(c1, c2)	; 
    27:    return 0; 
    28: } 

    30: void Show(0ne &c1, Two &c2) 
    31: { 
    32:    cout  c1.s1  c2.s2  '\n'; 
    33: } 


    3:	class One;  //	   
    4: 
    5:	class Two { 
    6:	private: 
    7:	  char *s2; //	   Two 

    13:	class One { 
    14:	   friend void Two::Show(One &c1); 
    15:	private: 
    16:	   char *s1; //	   One   Two:: Show 
    17;	public: 
    18:	   One() { s1 =	"Testing "; } 
    19:	}; 
              
   ,  ,    
 -,    ,  - 
.   One,    Two::Show(), 
  Two     . 
    30:	void Two::Show(One &c1) 
    31:	{ 
    32:	  cout  c1.s1  s2  '\n'; 
    33:	} 
                
  Show() ( 3033).      One &cl. 
  Show()    Two,    
     Two.


      


    ,       - 
.

        +, -, *  /  ,  
    C++       operator    , 
  . 15.1. 

 ., .*, ::  sizeof    . 
 ,  =, (), []  ->    
-. (    -   
 ). 


     - 


    class ZZ { 
    public: 
       friend ZZ operator+(ZZ a,  ZZ b); 
       friend ZZ operator-(ZZ a,   ZZ b);
       friend ZZ operator*(ZZ a,   ZZ b);
       friend ZZ operator/(ZZ a,   ZZ b);
       // ...  ,     
    };


      "" .    
    .
 
       (    ),  
  ,    . 
    35:	long operator+(TStrOp a,  TStrOp b) 
    36:	{ 
    37:	  return (atol(a,value) + atol(b.value)); 
    38: 	}
    39: 
    40:	long operator-(TStrOp a, TStrOp b) 
    41:	{ 
    42: 	 return (atol(a.value) - atol(b.value)); 
    43:	} 
          35-43.  
      ,    
    C++. 


      - 


         , 
    35:	long TStrOp::operator+(TStrOp b) 
    36:	{ 
    37:	    return (atol(value) + atol(b.value)); 
    38:	} 
    39: 
    40:	long TStrOp::operator-(TStrOp b) 
    41:	{ 
    42:	   return (atol(value) - atol(b.value)); 
    43:	} 

 ,  -   this,   ,   
  . ,      ,   ,  
. 

    long operator+(TStrOp a,  TStrOp b);      // ??? 

       ,  operator+()    TStrOp  
 -   this,    .  
  this     b     ,  
  ,  operator+(),   
.      TStrOp  operator+()  
this.value  b.value ( 37).     .

		   


,     STROPS2.CPP ( 12.5)   
private:   6: friend long operator-(TStrOp a); 
           13   , 
  ,       . 

    long operator-(void); 

      -      
    -   this,  
- operator-()       
    this->value.     
,       main(): 

    long TStrOp: :operator-(void) { 

    return -atol(value);    //  -atol(this->value) 

   } 


		  


           
 C++      .
    operator long() { return atol(value);  } 

		   


          []   
  - ,     ,  
        .    

    13:	  int operator[](unsigned i); 

    36:	int PseudoArray::operator[](unsigned i) 
    37:	{ 
    38:	  return Getlnt(i); 
    39:	} 

      ,        
 . ,     13 : 
    int operator[](char ); 

		   

       operator()      
,   .   operator()  
        .  , 
     .       
. 
      TAnyClass object = 100; 
      int q = object(); //    ! 
            object(),     
  object.operator()();. 

          ->   operator->(). 
     - .    -> 

       C++      
      ++  --.   , 
    TAnyClass: 

   ,  ,   C++,
  new  delete.   ,   
 ++ new  delete     malloc()  
free().     C++       
     ANSI    C++. 
          ,  new  
delete    ,   .  , new  delete  
         
 .    new  delete     
     . 

        C++   
    ,     new, 
    . ,   
BrandNew * =  ::new BrandNew      
BrandNew  new. , ::delete      
delete,   .

        new   
    ,  new      ,  
 null.     ,   
   ,  C++    - 
  _new_handler,   :	
    typedef void (*vfp)(void);	
    vpf _new_handler;                                                                  
     typedef  ,     . 
-                    ,      
              set_new_handler(),   
   NEW.:	
    vfp set_new_handler(vfp);      
        ,     C++. , 
          
: 
    void memerr(void)	
    {
      fputs("\n\nOut of memory\n", stderr);    
      exit(1);	
   }
        memerrO     , 
   ,   memerr  set_new_handler() 
 :	
    set_new_handler(memerr);                                                   
       set_new_haadler()    Borland C++. 

        ,    , , 
    -  ,   
.        
,         .    
    ,       
  .    ,      
            
 . 

     C++         
 ,  -:     
 
      TAnyClass(TAnyClass &copy)      
(TAnyClass),    ,     &    
TAnyClass,       .
    TAnyClass v1; 
    TAnyClass v2(1.  2,   "A test string"); 
    TAnyClass v3 = v2;       //    
...........................................................................................................
    TAnyClass v1; 
    TAnyClass v2(1, 2, "A test string"); 
    v1 = v2;    // ??? 
       v1      v2  
     v2  v1.  ! 
       ,   
.
         ,   
  . C++       
,        . 

     ,      ,   
 =.     
      void operator=(const CLASS&). 
,       TAnyClass  
     : 
    class TAnyClass { 
    private: 
    int i;	II    
    double r; //    
    char *s; //  -! 
    public: 
       ......    // .    TAnyClass 
       void operator=(const TAnyClass &copy);    //   
     operator=   ,  
     TAnyClass.    
 .  ,    b    TAnyClass,  
   = b     b.   
    : 
    void TAnyClass::operator=(const TAnyClass Acopy) 
    {
       cout  "\nlnside TAnyClass's operator* function; 
       if (this == &copy) 
         return; 
      delete s; 
      i = copy, i; 
      r = copy, r; 
      s = strdup(copy. s); 
   } 
. (     , ,  
    s       
delete.) 
      ,       .    
if    this     .  
       . 
,     
    TAnyClass v1, v2; 
     v1 = v1; 
        
 - . 
              
   .     
    operator=    
 *this: 

       IOMANIP.H (    
   IOSTREAM.H)    
 ,       
  . ,     
    cout  "Enter value in hex: "; 
    cin  hex  v;	
    cout  "Value in decimal == "  dec  v;	
     width ,       
 .

    cout  1  ";   "  2  ";   "  ; 
              
,      .   
    : 
    ((((cout  1)  ";   ")  2)  ";   ")  ; 
        ,        ? 


        -    ,   
,       (.  9). - 
   ,      this.  
 -      . 
    double (TFirstClass::*myfnptr)(void); 
    23:	myfnptr = &TFirstClass::Access; 
    25:	cout  setw(8)  dec  (fc.*myfnptr)() ; 
        - ,    
    .
    double TFirstClass::*dataPtr; 
     dataPtr      -  
 TFirstClass,      . 
    dataPtr = &TFirstClass::balance ;	

   double TFirstClass::*dataPtr = &TFirstClass::balance;	

    -    .
     -    ,    
  this          - 
.    -     , 
  : 
    TAnyClass::GlobalInit();	//    Globallnit() 
      . ( 
-      .)    
 TAnyClass::   ,     
TAnyClass  .  -    
  ,     , 
 : 
    char TAnyClass:: = 'q'; 

        