לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 16-02-2009, 19:22
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 1 שנכתבה על ידי fcf שמתחילה ב "פולימורפיזם ושיטות וירטואליות"

כאשר יש לך הורשה ממחלקה אב למחלקה בן, אתה למעשה מייצר כאילו את מחלקת האב ואז מסביבה מוסיף את הנתונים שיש במחלקה הבן שהם מעבר למה שיש במחלקה האב.
דוגמא שהביאו לנו במכללה (אגב, גם לנו יש מבחן במונחה עצמים בעוד יומיים )
קוד PHP:
 #include<iostream>
using namespace std;
#include <conio.h>

class points{
    protected:
        
double x,y;
    public:
    
void set_dim(double i,double j=0//j has default for circle
    
{
        
x=i;
        
y=j;
    }
    
virtual void show_area() = 0//pure

};

class 
triangle: public points{
    public:
        
void show_area() {
        
cout<<"Triangle with height "<<x<<"and base "<<y<<"\n";
        
cout<<"has an area of "<< x*0.5 <<".\n";
        }
};

class 
square: public points{
    public:
        
void show_area() {
        
cout<<"square with dimentions "<<x<<" x "<<y<<"\n";
        
cout<<"has an area of "<< <<".\n";
        }
};

class 
circle: public points{
    public:
        
//no definition of show_area() will cause an error
        
void show_area()
        {
            
cout << "Area is: "<<x<<" x 3.14 = " << 3.1415 << endl;
        }

};

int main()
{

    
points *p//create pointer to base type
    
triangle t//create objects of derived types
    
square s;
    
circle c//illegal can't create

    
p=&t;
    
p->set_dim(10.05.0);
    
p->show_area();
    
= &c;
    
p-> set_dim (5);
    
-> show_area();
    
getch();
    return 
0;
    


אתה יכול לראות ב main שבנינו מצביע מסוג האבא, והוא מסוגל לגשת לכל האיברים במחלקות היורשות (הבנים) ששייכות לאבא (זאת אומרת שאם יש פונקציה שבנית בבן שאיננה קיימת באבא, לא תוכל לגשת אליה עם מצביע שכזה).
זה הקטע של פולימורפיזם, האיחוד של כמה שיותר פונקציות ומשתנים השייכים לכלל המחלקות שלך ואילו בבנים ליישם פונקציות ומשתנים השייכים ספציפית רק לפונקציה הספציפית הזו.
זה טוב כי אתה מגדיר רק במקום אחד את כל המשתנים פעם אחת, ואז הבנים מקבלים את זה אוטומטית. זה נחמד.

בנוסף, יש את הקטע של virtual המאפשר לך שני דברים.
ה virtual הרגיל פשוט בא להגיד "אני פונקציה נחותה", זאת אומרת שכשתתבצע הורשה, אם לבן יש פונקציה באותו השם כמו הפונקציה virtual אצל האב, אז הפונקציה של הבן תמומש בפועל ולא זו של האב (זה היה קורה בכל מקרה גם בלי ה virtual אבל אומרים שזו דרך נכונה יותר לתיכנות).
הפונקציה virtual תמומש בצורה רגילה לחלוטין אצל האב וחוץ מהעובדה שבהורשה היא 'חלשה' יותר, זו פונקציה רגילה לכל דבר.

יש גם virtual אחר המכונה pure virtual והוא יוצהר במחלקה האב, אבל לא תמומש בו. היא באתה להגיד "לכל הבנים שלי, צריכה להיות פונקציה בשם "bla bla bla". אם תיצור מחלקה שתירש מהאב ולא תממש את הפונקציה הזו, תקבל שגיאת קומליפציה. בדוגמא שהבאתי למעלה, המתרגל לא מימש את show_area של המעגל, אלא אני מימשתי בעצמי (הדוגמא שלו היתה ללא המימוש כדי להראות לנו שזה לא עובד. אני תיקנתי ומימשתי בעצמי כדי לגרום לזה כן לעבוד).
המימוש של pure virtual כפי שניתן לראות בדוגמא הוא רגיל, רק שאתה לא ממש את הפונקציה להבדיל מ virtual רגיל, ואתה כותב בסוף "שווה אפס". אפילו בלי סוגריים מסולסלים.

מקווה שהיה ברור
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 07:02

הדף נוצר ב 0.05 שניות עם 11 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר