Συνάρτηση φίλου σε C++ και τάξεις με παραδείγματα |  2023

Συνάρτηση φίλου σε C++ και τάξεις με παραδείγματα | 2023

November 23, 2022 0 Von admin

Εισαγωγή

Σε αυτό το σεμινάριο, θα μάθουμε πώς να δημιουργήσουμε μια συνάρτηση φίλου στη C++ με τη βοήθεια ορισμένων παραδειγμάτων.

Η απόκρυψη δεδομένων είναι μια θεμελιώδης έννοια στον αντικειμενοστραφή προγραμματισμό και περιορίζει την πρόσβαση ιδιωτικών μελών εκτός της κλάσης.

Τι είναι η συνάρτηση φίλου στη C++;

Μια συνάρτηση φίλου στη C++ ορίζεται ως μια συνάρτηση που μπορεί να έχει πρόσβαση σε ιδιωτικά, προστατευμένα και δημόσια μέλη μιας κλάσης.

Η συνάρτηση φίλος δηλώνεται χρησιμοποιώντας τη λέξη-κλειδί φίλος μέσα στο σώμα της τάξης.

Σύνταξη συνάρτησης φίλου:

class className {
    ... .. ...
    friend returnType functionName(arguments);
    ... .. ...
}

Χρησιμοποιώντας τη λέξη-κλειδί, το „φίλος“ Ο μεταγλωττιστής κατανοεί ότι η δεδομένη συνάρτηση είναι συνάρτηση φίλου.

Δηλώνουμε τη λειτουργία φίλου μέσα στο σώμα μιας κλάσης, της οποίας τα προσωπικά και προστατευτικά δεδομένα πρέπει να έχουν πρόσβαση, ξεκινώντας με τη λέξη-κλειδί φίλος για πρόσβαση στα δεδομένα. Τα χρησιμοποιούμε όταν χρειάζεται να λειτουργούμε μεταξύ δύο διαφορετικών κλάσεων ταυτόχρονα.

Τι είναι το Friend Function;

Λειτουργίες φίλου της κλάσης χορηγείται άδεια πρόσβασης σε ιδιωτικά και προστατευμένα μέλη της κλάσης στη C++. Καθορίζονται συνολικά εκτός του πεδίου της τάξης. Οι συναρτήσεις φίλου δεν είναι συναρτήσεις μέλους της κλάσης. Λοιπόν, τι ακριβώς είναι η λειτουργία φίλου;

Μια συνάρτηση φίλου στη C++ είναι μια συνάρτηση που δηλώνεται εκτός μιας κλάσης, αλλά έχει δυνατότητα πρόσβασης στα ιδιωτικά και προστατευμένα μέλη της κλάσης. Θα μπορούσαν να υπάρξουν καταστάσεις στον προγραμματισμό όπου θέλουμε δύο κλάσεις να μοιράζονται τα μέλη τους. Αυτά τα μέλη μπορεί να είναι μέλη δεδομένων, συναρτήσεις κλάσης ή πρότυπα συναρτήσεων. Σε τέτοιες περιπτώσεις, κάνουμε την επιθυμητή συνάρτηση, φίλο και στις δύο αυτές κλάσεις, η οποία θα επιτρέψει την πρόσβαση σε ιδιωτικά και προστατευμένα δεδομένα των μελών της κλάσης.

Γενικά, οι συναρτήσεις που δεν είναι μέλη δεν μπορούν να έχουν πρόσβαση στα ιδιωτικά μέλη μιας συγκεκριμένης κλάσης. Μόλις δηλωθεί ως συνάρτηση φίλου, η συνάρτηση μπορεί να έχει πρόσβαση στα ιδιωτικά και προστατευμένα μέλη αυτών των κλάσεων.

Τύποι συναρτήσεων που καθορίζονται από το χρήστη

Οι συναρτήσεις φίλου στη C++ έχουν τους ακόλουθους τύπους

  • Συνάρτηση χωρίς όρισμα και χωρίς τιμή επιστροφής
  • Συνάρτηση χωρίς όρισμα αλλά με τιμή επιστροφής
  • Λειτουργία με όρισμα αλλά χωρίς τιμή επιστροφής
  • Συνάρτηση με όρισμα και τιμή επιστροφής

Δήλωση συνάρτησης φίλου σε C++

class class_name
{
   friend data_type function_name(arguments/s); //syntax of friend function. 
};

Στην παραπάνω δήλωση, η λέξη-κλειδί φίλος προηγείται της συνάρτησης. Μπορούμε να ορίσουμε τη συνάρτηση φίλου σε οποιοδήποτε σημείο του προγράμματος όπως μια κανονική συνάρτηση C++. Ο ορισμός της συνάρτησης μιας κλάσης δεν χρησιμοποιεί ούτε τη λέξη-κλειδί φίλος ή τελεστής ανάλυσης πεδίου (: 🙂.

Η συνάρτηση φίλου καλείται ως function_name(class_name) και η συνάρτηση μέλους ονομάζεται class_name. όνομα_λειτουργίας.

Χρήση της συνάρτησης Friend στην C++

Όπως αναφέρθηκε, απαιτούμε λειτουργίες φίλου κάθε φορά που πρέπει να έχουμε πρόσβαση στα ιδιωτικά ή προστατευμένα μέλη μιας τάξης. Αυτό συμβαίνει μόνο όταν δεν θέλουμε να χρησιμοποιήσουμε τα αντικείμενα αυτής της κλάσης για πρόσβαση σε αυτά τα ιδιωτικά ή προστατευμένα μέλη.

Για να το καταλάβουμε καλύτερα, ας εξετάσουμε δύο κατηγορίες: Τόκιο και Ρίο. Μπορεί να χρειαστούμε μια συνάρτηση, metro(), για να αποκτήσουμε πρόσβαση και στις δύο αυτές κλάσεις χωρίς περιορισμούς. Χωρίς τη συνάρτηση φίλος, θα απαιτήσουμε από το αντικείμενο αυτών των κλάσεων να έχει πρόσβαση σε όλα τα μέλη. Οι συναρτήσεις φίλου στο c++ μας βοηθούν να αποφύγουμε το σενάριο όπου η συνάρτηση πρέπει να είναι μέλος κάποιας από αυτές τις κλάσεις για πρόσβαση.

Υπερφόρτωση συνάρτησης C++

Δύο συναρτήσεις μπορούν να έχουν το ίδιο όνομα εάν ο αριθμός και ο τύπος του ορίσματος που διαβιβάστηκε είναι διαφορετικός. Οι συναρτήσεις που έχουν το ίδιο όνομα, αλλά έχουν διαφορετικά ορίσματα ονομάζονται συναρτήσεις υπερφόρτωσης.

Οι λειτουργίες φίλου χρησιμοποιούνται επίσης στην υπερφόρτωση χειριστή. Η υπερφόρτωση του δυαδικού τελεστή στο c++ χρησιμοποιώντας τη συνάρτηση φίλου μπορεί να γίνει όπως εξηγείται παρακάτω.

Υπερφόρτωση δυαδικού τελεστή σε C++ με χρήση της συνάρτησης Friend

Η συνάρτηση υπερφόρτωσης χειριστή προηγείται μιας λέξης-κλειδιού φίλου σε αυτήν την προσέγγιση. Δηλώνει επίσης ένα εύρος κλάσης συνάρτησης. Η συνάρτηση φίλου τελεστή παίρνει 2 παραμέτρους σε έναν δυαδικό τελεστή. Στη συνέχεια, μεταβάλλεται μία παράμετρος σε έναν μοναδιαίο τελεστή.

Η συνάρτηση θα υλοποιηθεί εκτός του πεδίου της τάξης. Όμως, η εργασία και η υλοποίηση είναι ίδια με τη λειτουργία δυαδικού τελεστή.

Εάν θέλετε να αναπτύξετε τις γνώσεις σας σε C++, σκεφτείτε να αποκτήσετε πιστοποίηση. Αυτό το Δωρεάν Μάθημα Εισαγωγής στη C++ θα σας βοηθήσει να μάθετε τις απαιτούμενες δεξιότητες και επίσης ένα πιστοποιητικό ολοκλήρωσης που μπορεί να προστεθεί στα κοινωνικά σας προφίλ. Μπορείτε επίσης να δείτε το Πρόγραμμα Full Stack από το IIT Roorkee.

Χαρακτηριστικά της συνάρτησης φίλου στη C++

  • Η συνάρτηση δεν βρίσκεται στο «εύρος» της τάξης στην οποία έχει δηλωθεί φίλος.
  • Η λειτουργικότητα του φίλου δεν περιορίζεται μόνο σε μία κατηγορία
  • Οι συναρτήσεις φίλου μπορεί να είναι ένα μέλος μιας κλάσης ή μια συνάρτηση που δηλώνεται εκτός του πεδίου εφαρμογής της κλάσης.
  • Δεν μπορεί να κληθεί χρησιμοποιώντας το αντικείμενο καθώς δεν εμπίπτει στο πεδίο εφαρμογής αυτής της κλάσης.
  • Μπορούμε να την καλέσουμε όπως κάθε κανονική συνάρτηση της τάξης.
  • Οι συναρτήσεις φίλου έχουν αντικείμενα ως ορίσματα.
  • Δεν μπορεί να έχει άμεση πρόσβαση στα ονόματα μελών και πρέπει να χρησιμοποιήσει τον τελεστή μέλους κουκκίδας και να χρησιμοποιήσει ένα όνομα αντικειμένου με το όνομα μέλους.
  • Μπορούμε να το δηλώσουμε είτε στο «δημόσιο» ή στο «ιδιωτικό».
  • Αυτές είναι μερικές από τις συναρτήσεις φίλου στα χαρακτηριστικά της C++

Εφαρμογή συναρτήσεων φίλου

Οι λειτουργίες φίλου μπορούν να υλοποιηθούν με δύο τρόπους:

Μια μέθοδος άλλης κλάσης:

Δηλώνουμε μια κλάση φίλου όταν θέλουμε να έχουμε πρόσβαση στα μη δημόσια μέλη δεδομένων μιας συγκεκριμένης κλάσης.

Μια παγκόσμια συνάρτηση:

Μια «συνάρτηση παγκόσμιου φίλου» σάς επιτρέπει να έχετε πρόσβαση σε όλα τα ιδιωτικά και προστατευμένα μέλη της καθολικής δήλωσης κλάσης.

Ένα απλό παράδειγμα μιας συνάρτησης φίλου C++ που χρησιμοποιείται για την εκτύπωση του μήκους του κουτιού.

Κώδικας:

#include <iostream>
using namespace std;
class Box
{
   private:
        int length;
   public:
         Box (): length (0) {}
   friend int printLength (Box); //friend function
};
int printLength (Box b)
{
    b. length +=10;
    return b. length;
}
int main ()
{
   Box b;
   cout <<” Length of box:” <<printLength (b)<<endl;
    return 0;
}

Παραγωγή:

Μήκος κουτιού: 10

Απλό παράδειγμα όταν η συνάρτηση είναι φιλική για δύο κατηγορίες.

Κώδικας:

#include<iostream>
using namespace std;
class B; //forward declaration.
class A
{
    int x;
    public:
         void setdata (int i)
           {
              x=i;
           }
    friend void max (A, B); //friend function.
} ;
class B
{
     int y;
     public:
          void setdata (int i)
            {
               y=i;
            }
     friend void max (A, B);
};
void max (A a, B b)
{
   if (a.x >= b.y)
         std:: cout<< a.x << std::endl;
   else
         std::cout<< b.y << std::endl;
}
  int main ()
{
   A a;
   B b;
    a. setdata (10);
    b. setdata (20);
    max (a, b);
    return 0;
}

Παραγωγή:

20

Στο παραπάνω παράδειγμα, η συνάρτηση max () είναι φιλική τόσο για την κλάση Α όσο και για τη Β, δηλαδή, η συνάρτηση max () μπορεί να έχει πρόσβαση στα ιδιωτικά μέλη δύο κλάσεων.

Υλοποίηση μέσω μιας μεθόδου άλλης κλάσης

Μια κλάση δεν μπορεί να έχει πρόσβαση στα ιδιωτικά μέλη μιας άλλης τάξης. Ομοίως, μια κλάση δεν μπορεί να έχει πρόσβαση στα προστατευμένα μέλη μιας κλάσης. Χρειαζόμαστε μια τάξη φίλων σε αυτή την περίπτωση.

Μια κλάση φίλου χρησιμοποιείται όταν χρειάζεται να αποκτήσουμε πρόσβαση σε ιδιωτικά και προστατευμένα μέλη της τάξης στην οποία έχει δηλωθεί ως φίλος. Είναι επίσης δυνατό να δηλωθεί μόνο μια συνάρτηση μέλους μιας άλλης τάξης ως φίλος.

Δήλωση τάξης φίλου

class class_name
{
      friend class friend_class;// declaring friend class
};
class friend_class
{
};

Όλες οι συναρτήσεις στο friend_class είναι συναρτήσεις φίλου του class_name.

Ένα απλό παράδειγμα τάξης φίλων:

Κώδικας:

#include <iostream>
using namespace std;
class A
{
   int x=4;
   friend class B; //friend class
};
class B
{
   public:
   void display (A &a)
     {
        cout<<”value of x is:” <<a.x;
     }
};
int main ()
{
   A a;
   B b;
   b. display (a);
    return 0;
}

Παραγωγή:

Η τιμή του x είναι: 4

Εφαρμογή μιας καθολικής λειτουργίας

Κώδικας:

#include<iostream>
using namespace std;
class space
{
    int x;
    int y;
    int z;
    public:
    void setdata (int a, int b, int c);
    void display(void);
     friend void operator- (space &s);
};
void space ::setdata (int a, int b, int c)
{
    x=a; y=b; z=c;
}
void space::display(void)
{
    cout<<x<<" "<<y<<" "<<z<<"\n";
}
void operator- (space &s)
{
    s.x =- s.x;
    s.y =- s.y;
    s.z =- s.z;
}
int main ()
{
    space s;
    s. setdata (5,2,9);
    cout<<"s:";
    s. display ();
    -s;
    cout<<"-s:";
    s. display ();
    return 0;
}

Παραγωγή:

s: 5 2 9

-s: -5 -2 -9

Στο παραπάνω παράδειγμα τελεστής- είναι η συνάρτηση φίλος που δηλώνεται καθολικά στο πεδίο της κλάσης.

Τάξη φίλων σε C++

Τι είναι το Friend class στην C++;

Το Friend Class είναι μια κλάση που μπορεί να έχει πρόσβαση τόσο σε ιδιωτικές όσο και σε προστατευμένες μεταβλητές της κλάσης στην οποία έχει δηλωθεί ως φίλος, ακριβώς όπως μια συνάρτηση φίλου. Οι κλάσεις που δηλώνονται ως φίλοι σε οποιαδήποτε άλλη τάξη θα έχουν όλες τις συναρτήσεις μέλους ως συναρτήσεις φίλου στην κλάση φίλου. Οι συναρτήσεις φίλου χρησιμοποιούνται για τη σύνδεση και των δύο αυτών κλάσεων.

Τάξη φίλου στη σύνταξη C++:

class One{
<few lines of code here>
friend class Two;
};
class Two{
<few lines of code>
};

Σημείωση : Εκτός και μέχρι να δηλώσουμε, η ταξική φιλία δεν είναι ούτε αμοιβαία ούτε κληρονομική.

Για να καταλάβετε αναλυτικά:

  • Εάν η τάξη Α είναι φίλος της τάξης Β, τότε η τάξη Β δεν είναι φίλος της τάξης Α.
  • Επίσης, αν η κλάση Α είναι φίλος της τάξης Β, και τότε η τάξη Β είναι φίλος της τάξης Γ, η τάξη Α δεν είναι φίλος της τάξης Γ.
  • Εάν η βασική κλάση είναι φίλος της κλάσης Χ, η υποκλάση Παράγωγο δεν είναι φίλος της κλάσης Χ. και αν η κλάση Χ είναι φίλος της κλάσης Βάσης, η κλάση Χ δεν είναι φίλος της υποκλάσης Παράγωγο.

Πλεονεκτήματα της λειτουργίας φίλου στη C++

  • Λειτουργία φίλου σε c++ παρέχουν έναν βαθμό ελευθερίας στην επιλογή σχεδίασης διεπαφής
  • Μια συνάρτηση φίλου χρησιμοποιείται για πρόσβαση σε όλα τα μη δημόσια μέλη μιας τάξης.
  • Μπορείτε να χρησιμοποιήσετε μια συνάρτηση φίλου για να γεφυρώσετε δύο κλάσεις λειτουργώντας αντικείμενα δύο διαφορετικών κλάσεων.
  • Αυξάνει την ευελιξία των χειριστών υπερφόρτωσης.
  • Ενισχύει την ενθυλάκωση. Μόνο ο προγραμματιστής που έχει πρόσβαση στον πηγαίο κώδικα της τάξης μπορεί να κάνει φίλο συνάρτησης σε αυτήν την τάξη.
  • Μπορείτε να δηλώσετε μια συνάρτηση μέλους μιας τάξης ως φίλο μιας άλλης τάξης.
  • Λειτουργεί συμμετρικά με όλους τους φίλους του.

Σύνοψη της συνάρτησης φίλου C++

  • Παρόλο που τα πρωτότυπα για τις συναρτήσεις φίλου εμφανίζονται στον ορισμό της κλάσης, οι φίλοι δεν είναι συναρτήσεις μελών.
  • Μπορούμε να δηλώσουμε συναρτήσεις φίλου οπουδήποτε σε έναν ορισμό κλάσης, είτε σε δημόσιες, ιδιωτικές ή προστατευμένες ενότητες.
  • Μπορούμε να κάνουμε δηλώσεις φίλων οπουδήποτε σε έναν ορισμό κλάσης, δηλαδή είτε σε δημόσια, ιδιωτικά ή προστατευμένα τμήματα.
  • Παραβιάζει την αρχή απόκρυψης δεδομένων των κλάσεων, επομένως θα πρέπει να το αποφεύγουμε όσο το δυνατόν περισσότερο. Μπορείτε να παραχωρήσετε φιλία αλλά να μην την αποδεχτείτε, δηλαδή, για να είναι η τάξη Β φίλος της τάξης Α, η τάξη Α πρέπει να δηλώσει ρητά ότι η τάξη Β είναι φίλος της. Η σχέση φιλίας δεν είναι ούτε συμμετρική ούτε μεταβατική. Η φιλική σχέση δεν μπορεί να κληρονομηθεί.

Αυτό μας φέρνει στο τέλος του ιστολογίου σχετικά με τις λειτουργίες φίλου στη C++. Ελπίζουμε ότι αυτό θα σας βοηθήσει να βελτιώσετε τις δεξιότητές σας στην C++. Επίσης, εάν ετοιμάζεστε για Συνεντεύξεις, ρίξτε μια ματιά σε αυτές τις Ερωτήσεις Συνέντευξης για C++ για να το κάνετε σαν επαγγελματίας.

Συχνές ερωτήσεις


Τι είναι η συνάρτηση φίλου στη C++;

Στην C++, μια συνάρτηση που έχει πρόσβαση στα ιδιωτικά, προστατευμένα και δημόσια μέλη μιας κλάσης αναφέρεται ως συνάρτηση φίλου. Μέσα στο σώμα της τάξης, η λέξη-κλειδί φίλος χρησιμοποιείται για να δηλώσει τη συνάρτηση φίλος.

Τι είναι η συνάρτηση φίλου με παράδειγμα;

Στην C++, η συνάρτηση φίλου είναι μια μοναδική συνάρτηση που, αν και δεν είναι μέλος μιας κλάσης, έχει τη δυνατότητα πρόσβασης σε μυστικά και προστατευμένα δεδομένα. Χρησιμοποιώντας τον όρο «φίλος» μέσα στην τάξη, μια συνάρτηση φίλου είναι μια συνάρτηση μη μέλους ή κανονική συνάρτηση μιας τάξης που προσδιορίζεται ως φίλος.

Ποια είναι τα πλεονεκτήματα της συνάρτησης φίλου στη C++;

Μερικά από τα πλεονεκτήματα της συνάρτησης φίλου στη c++ είναι
1. Επιτρέπει σε μια συνάρτηση που δεν είναι μέλος να μοιράζεται εμπιστευτικές πληροφορίες κλάσης.
2. Καθιστά εύκολη την πρόσβαση στα ιδιωτικά μέλη μιας τάξης.
3. Χρησιμοποιείται συχνά όταν δύο ή περισσότερες κλάσεις περιλαμβάνουν μέλη που είναι συνδεδεμένα με άλλα στοιχεία προγράμματος.
4. Επιτρέπει τη δημιουργία πιο αποτελεσματικού κώδικα.
5. Προσφέρει επιπλέον δυνατότητες που συνήθως δεν χρησιμοποιεί η τάξη.
6. Επιτρέπει σε μια συνάρτηση που δεν είναι μέλος να μοιράζεται εμπιστευτικές πληροφορίες τάξης.

Ποιοι είναι οι περιορισμοί της λειτουργίας φίλου;

Το κύριο μειονέκτημα των συναρτήσεων φίλου είναι ότι καταλαμβάνουν το μέγιστο μέγεθος της μνήμης και δεν μπορούν να κάνουν καμία έννοια πολυμορφισμού χρόνου εκτέλεσης.