++C למתחילים
 
דף הבית>>פרק 6>>מצביעים ומערכים>>פונקציות ומצביעים>>מצביע לעצם

מצביע לעצם: <-

עד כה הגדרנו מצביעים למשתנים פשוטים, אך ניתן גם להגדיר מצביע לעצמים. אם לדוגמא p הוא מצביע לעצם ואנו רוצים להגיע לאיבר x בעצם ,אזי אנו חייבים לרשום p).x*) . כדי למנוע את הסירבול בכתיבה הזו הגדירו אופרטור מיוחד לצורך כך. האופרטור <- (בנוי מהתו גדול מ- וחיסור). לדוגמה:  

#include <iostream.h>
#include <conio.h>

    class NewGeom 
     { 
       private: 
       int length, width; 
       public: 
       void init (int a, int b) 
        { 
        length = a; 
        width = b; 
        }; 
       int Out_len() 
        { 
        return length; 
        }; 
       int Out_wid() 
        {
	     return width; 
        }; 
       int area() 
        { 
         return length*width; 
        }; 
       int perim() 
        { 
         return 2*(length+width); 
        }; 
    }; 
    void main (void) 
    { 
      NewGeom fig; 
      NewGeom *stptr = &fig; 
      fig.init(2, 3); 
       cout<<"Initial values are: length = "<<fig.Out_len(); 
       cout<<", width = "<<fig Out_wid()<'\n'; 
       cout<<"An area is "<<fig.area(); 
       cout<<", and a perimeter is "<<fig.perim()<<'\n'; 
        stptr->init(5, 10); 
       cout<<"The new values are: length = "<<stptr->Out_len(); 
        stptr->cout<<", width ="<<stptr->Out_wid()<<'\n';  
      cout<<"An area is "<<fig.area(); 
      cout<<", and a perimeter is "<<fig.perim<<'\n'; 
      cout<<"To finish press any key..."; 
       getch(); 
    } 
 

פלט התוכנית:

Initial values are: length=2 , width=3
An area is 6 , and a perimeter is 10
The new values are: length=5 , width=10
An area is 50 , and a perimeter is 30
To finish press any key...
 

הסבר התוכנית: בתוכנית זו השתמשנו במצביע לעצם. בתוכנית הראשית (main) הגדרנו שני עצמים מסוג מחלקת NewGeom - האחד fig השני stptr* שהוא בעצם מצביע המאותחל לכתובת של עצם fig . בתחילה אין כל חדש כלומר אנומפעילים את הפונקציה init על העצם fig וכך גם את שאר הפונקציות ומוצאים א האורך הרוחב השטח והיקף של מלבן. לאחר מכן אנו מפעילים את הפונקציה init על העצם stptr ופה אנו רואים את השימוש במצביע לעצם.

עצמים כפרמטרים של פונקציות:

שימוש נוסף של מצביעים הוא בפונקציות המקבלות כפרמטרים מצביעים לעצמים. בשביל מה אנו זקוקים לכך? ובכן אם נעביר לפונקציה עצם בזמן הכניסה לפונקציה, אזי גם אם העצם גדול ביותר כל כולו מועתק לפונקציה בו בזמן שאם אנו משתמשים במצביעים לעצם אזי לא משנה לנו מה גודלו של העצם כי אך ורק הכתובת שלו מועתקת לפונקציה. לדוגמה:  

#include <iostream.h> 
#include <conio.h>

 class Point
 {
      public:
      int a, b;
      Point(int x, int y)
      {
        a=x;
        b=y;
      }
      void show()
      {
        cout<<"a="<<a<<"b="<<b<<'\n';
      }
      void add(Point *p1, Point *p2);
 };
      void add(Point *p1, Point *p2)
      {
        p1->a += p2->a;
        p1->b += p2->b;
      }
main()
{
   Point p1(7, 10), p2(8, 20);
   add(&p1, &p2);
   p1.show();
   getch();
   return 0;
}
 

פלט התוכנית:

a=15 b=30  

הקודם הבא