top 70 c interview questions
Οι πιο συχνές βασικές και προχωρημένες ερωτήσεις συνέντευξης C ++ με παραδείγματα κώδικα για υποψηφίους εισόδου και έμπειρους επαγγελματίες:
Αυτό το λεπτομερές άρθρο θα είναι σίγουρα ένας σελιδοδείκτης για όσους προετοιμάζονται για μια συνέντευξη C ++.
Σχεδόν όλα τα σημαντικά θέματα στο C ++ καλύπτονται εδώ μαζί με μερικές βασικές ερωτήσεις για προχωρημένα θέματα όπως η Βασική Βιβλιοθήκη Πρότυπων (STL) κ.λπ.
Αυτό το σύνολο ερωτήσεων κωδικοποίησης C ++ θα σας βοηθήσει να αντιμετωπίσετε οποιαδήποτε συνέντευξη C ++ με αυτοπεποίθηση και να την καθαρίσετε με επιτυχία στην πρώτη προσπάθεια.
Τι θα μάθετε:
- Ερωτήσεις συνέντευξης C ++ με παραδείγματα κώδικα
Ερωτήσεις συνέντευξης C ++ με παραδείγματα κώδικα
Παρακάτω αναφέρονται οι πιο δημοφιλείς ερωτήσεις συνέντευξης προγραμματισμού C ++ που απαντώνται από έναν ειδικό C ++.
Διαβάστε επίσης => Κορυφαίες ερωτήσεις συνέντευξης προγραμματισμού Γ
Βασικό C ++
Δομή του προγράμματος C ++
Q # 1) Ποια είναι η βασική δομή ενός προγράμματος C ++;
Απάντηση: Η βασική δομή ενός προγράμματος C ++ φαίνεται παρακάτω:
#include int main() { cout<<”Hello,World!”; return 0; }
Η πρώτη γραμμή που ξεκινά με « # ' είναι ένα οδηγία προεπεξεργαστή . Σε αυτήν την περίπτωση, χρησιμοποιούμε περιλαμβάνω ως οδηγία που λέει στον μεταγλωττιστή να περιλαμβάνει μια κεφαλίδα ενώ ' iostream.h 'Που θα χρησιμοποιηθεί για βασική είσοδο / έξοδο αργότερα στο πρόγραμμα.
Η επόμενη γραμμή είναι η «κύρια» συνάρτηση που επιστρέφει έναν ακέραιο. Η κύρια λειτουργία είναι το σημείο εκκίνησης για οποιοδήποτε πρόγραμμα C ++. Ανεξάρτητα από τη θέση του στο αρχείο πηγαίου κώδικα, τα περιεχόμενα της κύριας λειτουργίας εκτελούνται πάντα πρώτα από τον μεταγλωττιστή C ++.
Στην επόμενη γραμμή, μπορούμε να δούμε ανοιχτά σγουρά τιράντες που δείχνουν την αρχή ενός μπλοκ κώδικα. Μετά από αυτό, βλέπουμε τις οδηγίες προγραμματισμού ή τη γραμμή κώδικα που χρησιμοποιεί τον αριθμό που είναι η τυπική ροή εξόδου (ο ορισμός του υπάρχει στο iostream.h).
Αυτή η ροή εξόδου παίρνει μια σειρά χαρακτήρων και την εκτυπώνει σε μια τυπική συσκευή εξόδου. Σε αυτήν την περίπτωση, είναι, 'Γεια, Κόσμος!'. Λάβετε υπόψη ότι κάθε οδηγία C ++ τελειώνει με ένα ερωτηματικό (;), το οποίο είναι πολύ απαραίτητο και η παράλειψή του θα έχει ως αποτέλεσμα σφάλματα συλλογής.
Πριν κλείσουμε τα τιράντες}, βλέπουμε μια άλλη γραμμή 'επιστροφή 0;'. Αυτό είναι το σημείο επιστροφής στην κύρια συνάρτηση.
Κάθε πρόγραμμα C ++ θα έχει μια βασική δομή όπως φαίνεται παραπάνω με μια οδηγία προεπεξεργαστή, μια δήλωση κύριας λειτουργίας ακολουθούμενη από ένα μπλοκ κώδικα και στη συνέχεια ένα σημείο επιστροφής στην κύρια λειτουργία που δείχνει την επιτυχή εκτέλεση του προγράμματος.
Q # 2) Ποια είναι τα σχόλια στο C ++;
Απάντηση: Τα σχόλια στο C ++ είναι απλά ένα κομμάτι του πηγαίου κώδικα που αγνοείται από τον μεταγλωττιστή. Είναι χρήσιμο μόνο για έναν προγραμματιστή να προσθέσει μια περιγραφή ή πρόσθετες πληροφορίες σχετικά με τον πηγαίο κώδικα.
Στο C ++ υπάρχουν δύο τρόποι για να προσθέσετε σχόλια:
- // σχόλιο μίας γραμμής
- / * αποκλεισμός σχολίου * /
Ο πρώτος τύπος θα απορρίψει τα πάντα μετά τη συνάντηση του μεταγλωττιστή '//'. Στο δεύτερο τύπο, ο μεταγλωττιστής απορρίπτει τα πάντα μεταξύ '/ *' και '* /'.
Μεταβλητές, τύποι δεδομένων και σταθερές
Q # 3) Διαφορά μεταξύ δήλωσης και ορισμού μιας μεταβλητής.
Απάντηση: Η δήλωση μιας μεταβλητής καθορίζει απλώς τον τύπο δεδομένων μιας μεταβλητής και το όνομα της μεταβλητής. Ως αποτέλεσμα της δήλωσης, λέμε στον μεταγλωττιστή να διατηρήσει το χώρο για μια μεταβλητή στη μνήμη σύμφωνα με τον καθορισμένο τύπο δεδομένων.
Παράδειγμα:
int Result; char c; int a,b,c;
Όλα τα παραπάνω είναι έγκυρες δηλώσεις. Επίσης, σημειώστε ότι ως αποτέλεσμα της δήλωσης, η τιμή της μεταβλητής είναι απροσδιόριστη.
Ενώ, ένας ορισμός είναι μια εφαρμογή / παρουσίαση της δηλωθείσας μεταβλητής όπου συνδέουμε την κατάλληλη τιμή με τη δηλωμένη μεταβλητή, έτσι ώστε ο σύνδεσμος να είναι σε θέση να συνδέει αναφορές με τις κατάλληλες οντότητες.
Από το παραπάνω Παράδειγμα ,
Αποτέλεσμα = 10;
C = «Α»;
Αυτοί είναι έγκυροι ορισμοί.
Q # 4) Σχόλιο για το τοπικό και παγκόσμιο πεδίο μιας μεταβλητής.
Απάντηση: Το εύρος μιας μεταβλητής ορίζεται ως η έκταση του κώδικα προγράμματος εντός του οποίου η μεταβλητή παραμένει ενεργή, δηλαδή μπορεί να δηλωθεί, να οριστεί ή να χρησιμοποιηθεί.
Υπάρχουν δύο τύποι πεδίων στο C ++:
- Τοπικό πεδίο εφαρμογής: Μια μεταβλητή λέγεται ότι έχει τοπικό εύρος ή είναι τοπική όταν δηλώνεται μέσα σε ένα μπλοκ κώδικα. Η μεταβλητή παραμένει ενεργή μόνο εντός του μπλοκ και δεν είναι προσβάσιμη εκτός του μπλοκ κώδικα.
- Παγκόσμιο πεδίο εφαρμογής: Μια μεταβλητή έχει παγκόσμιο εύρος όταν είναι προσβάσιμη σε όλο το πρόγραμμα. Μια καθολική μεταβλητή δηλώνεται στην κορυφή του προγράμματος πριν από όλους τους ορισμούς της συνάρτησης.
Παράδειγμα:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
Q # 5) Ποια είναι η προτεραιότητα όταν υπάρχει μια καθολική μεταβλητή και μια τοπική μεταβλητή στο πρόγραμμα με το ίδιο όνομα;
Απάντηση: Όποτε υπάρχει μια τοπική μεταβλητή με το ίδιο όνομα με εκείνη μιας καθολικής μεταβλητής, ο μεταγλωττιστής δίνει προτεραιότητα στην τοπική μεταβλητή.
Παράδειγμα:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Η έξοδος του παραπάνω κώδικα είναι 5. Αυτό συμβαίνει επειδή, παρόλο που και οι δύο μεταβλητές έχουν το ίδιο όνομα, ο μεταγλωττιστής έχει δώσει προτίμηση στο τοπικό πεδίο.
Q # 6) Όταν υπάρχει μια καθολική μεταβλητή και τοπική μεταβλητή με το ίδιο όνομα, πώς θα αποκτήσετε πρόσβαση στην καθολική μεταβλητή;
Απάντηση: Όταν υπάρχουν δύο μεταβλητές με το ίδιο όνομα αλλά διαφορετικό εύρος, δηλαδή μία είναι τοπική μεταβλητή και η άλλη είναι καθολική μεταβλητή, ο μεταγλωττιστής θα δώσει προτίμηση σε μια τοπική μεταβλητή.
Για να αποκτήσουμε πρόσβαση στην καθολική μεταβλητή, χρησιμοποιούμε ένα « τελεστής ανάλυσης εύρους (: :) '. Χρησιμοποιώντας αυτόν τον τελεστή, μπορούμε να έχουμε πρόσβαση στην τιμή της καθολικής μεταβλητής.
Παράδειγμα:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Παραγωγή:
Καθολική μεταβλητή x = 10
τοπική μεταβλητή x = 2
Q # 7) Πόσοι τρόποι υπάρχουν για να ξεκινήσετε ένα int με ένα Constant;
Απάντηση: Υπάρχουν δύο τρόποι:
- Η πρώτη μορφή χρησιμοποιεί την παραδοσιακή σημειογραφία C.
int αποτέλεσμα = 10; - Η δεύτερη μορφή χρησιμοποιεί τη σημειογραφία κατασκευαστή.
int αποτέλεσμα (10);
Σταθερές
Q # 8) Τι είναι μια σταθερά; Εξηγήστε με ένα παράδειγμα.
Απάντηση: Μια σταθερά είναι μια παράσταση που έχει μια σταθερή τιμή. Μπορούν να χωριστούν σε ακέραιες, δεκαδικές, κυμαινόμενα σημεία, χαρακτήρες ή σταθερές συμβολοσειρών ανάλογα με τον τύπο δεδομένων τους.
Εκτός από το δεκαδικό, το C ++ υποστηρίζει επίσης δύο ακόμη σταθερές, δηλαδή οκτάλη (στη βάση 8) και δεκαεξαδική (στη βάση 16) σταθερές.
Παραδείγματα σταθερών:
- 75 // ακέραιος (δεκαδικό)
- 0113 // οκτάλη
- 0x4b // δεκαεξαδικό
- 3.142 // κυμαινόμενο σημείο
- 'C' // σταθερά χαρακτήρων
- 'Γεια, Κόσμος' // σταθερά συμβολοσειράς
Σημείωση: Όταν πρέπει να αντιπροσωπεύουμε έναν μόνο χαρακτήρα, χρησιμοποιούμε μεμονωμένα εισαγωγικά και όταν θέλουμε να ορίσουμε μια σταθερά με περισσότερους από έναν χαρακτήρες, χρησιμοποιούμε διπλά εισαγωγικά.
Q # 9) Πώς ορίζετε / δηλώνετε σταθερές στο C ++;
Απάντηση: Στο C ++, μπορούμε να ορίσουμε τις σταθερές μας χρησιμοποιώντας το #καθορίζω οδηγία προεπεξεργαστή.
# καθορισμός τιμής αναγνωριστικού
Παράδειγμα:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Παραγωγή: Περιοχή κύκλου = 78,55
Όπως φαίνεται στο παραπάνω παράδειγμα, μόλις καθορίσουμε μια σταθερή οδηγία #define, μπορούμε να τη χρησιμοποιήσουμε σε όλο το πρόγραμμα και να αντικαταστήσουμε την αξία του.
Μπορούμε να δηλώσουμε σταθερές στο C ++ χρησιμοποιώντας το ' υπ Λέξη-κλειδί. Αυτός ο τρόπος είναι παρόμοιος με αυτόν της δήλωσης μιας μεταβλητής, αλλά με ένα πρόθεμα const.
Παραδείγματα δήλωσης σταθεράς
const int pi = 3.142;
const char c = 'sth';
const zipcode = 411014;
Στα παραπάνω παραδείγματα, όποτε δεν προσδιορίζεται ο τύπος μιας σταθεράς, ο μεταγλωττιστής C ++ την προεπιλογεί σε ακέραιο τύπο.
Χειριστές
Q # 10) Σχόλιο σχετικά με τον χειριστή ανάθεσης στο C ++.
Απάντηση: Ο χειριστής ανάθεσης στο C ++ χρησιμοποιείται για την εκχώρηση τιμής σε άλλη μεταβλητή.
a = 5;
Αυτή η γραμμή κώδικα εκχωρεί την ακέραια τιμή 5 σε μεταβλητή προς την .
Το τμήμα στα αριστερά του χειριστή = είναι γνωστό ως αξία (αριστερή τιμή) και το δικαίωμα ως τιμή (σωστή τιμή). μεγάλο αξία πρέπει πάντα να είναι μια μεταβλητή, ενώ η δεξιά πλευρά μπορεί να είναι μια σταθερά, μια μεταβλητή, το αποτέλεσμα μιας λειτουργίας ή οποιουδήποτε συνδυασμού αυτών.
Η λειτουργία ανάθεσης πραγματοποιείται πάντα από τα δεξιά προς τα αριστερά και ποτέ στο αντίστροφο.
Μία ιδιότητα που έχει το C ++ έναντι των άλλων γλωσσών προγραμματισμού είναι ότι ο χειριστής ανάθεσης μπορεί να χρησιμοποιηθεί ως τιμή (ή μέρος ενός τιμή ) για άλλη εργασία.
Παράδειγμα:
a = 2 + (b = 5);
είναι ισοδύναμο με:
b = 5;
a = 2 + b;
Αυτό σημαίνει, πρώτα εκχωρήστε 5 σε μεταβλητή σι και μετά εκχωρήστε σε προς την, η αξία δύο συν το αποτέλεσμα της προηγούμενης έκφρασης του σι (δηλαδή 5), αφήνει προς την με τελική τιμή 7 .
Έτσι, η ακόλουθη έκφραση ισχύει επίσης στο C ++:
a = b = c = 5;
εκχώρηση 5 σε μεταβλητές προς την , σι και ντο .
Ε # 11) Ποια είναι η διαφορά μεταξύ ίσο με (==) και χειριστή ανάθεσης (=);
Απάντηση: Στο C ++, ισούται με (==) και τελεστής ανάθεσης (=) είναι δύο εντελώς διαφορετικοί τελεστές.
Το Equal to (==) είναι ένας σχετικός τελεστής ισότητας που αξιολογεί δύο εκφράσεις για να δει αν είναι ίσες και επιστρέφει αληθές εάν είναι ίσες και ψευδείς εάν δεν είναι.
Ο τελεστής ανάθεσης (=) χρησιμοποιείται για να εκχωρήσει μια τιμή σε μια μεταβλητή. Ως εκ τούτου, μπορούμε να έχουμε μια σύνθετη λειτουργία ανάθεσης μέσα στον σχεσιακό φορέα ισότητας για αξιολόγηση.
Q # 12) Ποιοι είναι οι διάφοροι αριθμητικοί χειριστές στο C ++;
Απάντηση: Το C ++ υποστηρίζει τους ακόλουθους αριθμητικούς τελεστές:
- + προσθήκη
- - αφαίρεση
- * πολλαπλασιασμός
- / διαίρεση
- % ενότητα
Ας δείξουμε τους διάφορους αριθμητικούς τελεστές με το ακόλουθο κομμάτι κώδικα.
Παράδειγμα:
#include int main () { int a=5, b=3; cout<<”a + b = “< Παραγωγή :
a + b = 8
α - β = 2
a * b = 15
a / b = 2
a% b = 1
Όπως φαίνεται παραπάνω, όλες οι άλλες λειτουργίες είναι απλές και ίδιες με τις πραγματικές αριθμητικές πράξεις, εκτός από τον χειριστή modulo που είναι αρκετά διαφορετικός. Ο χειριστής Modulo διαιρεί a και b και το αποτέλεσμα της λειτουργίας είναι το υπόλοιπο της διαίρεσης.
Ε # 13) Ποιοι είναι οι διάφοροι χειριστές σύνθετων εργασιών στο C ++;
Απάντηση: Ακολουθούν οι τελεστές εκχώρησης Compound στο C ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Ο τελεστής σύνθετης ανάθεσης είναι ένα από τα πιο σημαντικά χαρακτηριστικά της γλώσσας C ++ που μας επιτρέπουν να αλλάξουμε την τιμή μιας μεταβλητής με έναν από τους βασικούς τελεστές:
Παράδειγμα:
value += increase; is equivalent to value = value + increase; if base_salary is a variable of type int. int base_salary = 1000; base_salary += 1000; #base_salary = base_salary + 1000 base_salary *= 5; #base_salary = base_salary * 5;
Q # 14) Δηλώστε τη διαφορά μεταξύ των λειτουργιών πριν και μετά την προσαύξηση / μείωσης.
Απάντηση: Το C ++ επιτρέπει σε δύο τελεστές, δηλαδή ++ (αύξηση) και - (μείωση), που σας επιτρέπουν να προσθέσετε 1 στην υπάρχουσα τιμή μιας μεταβλητής και να αφαιρέσετε 1 από τη μεταβλητή αντίστοιχα. Αυτοί οι τελεστές με τη σειρά τους, ονομάζονται αύξηση (++) και μείωση (-).
Παράδειγμα:
a = 5;
ένα ++;
Η δεύτερη δήλωση, ένα ++, θα προκαλέσει την προσθήκη 1 στην τιμή του a. Έτσι, το ++ ισοδυναμεί με
α = α + 1; ή
a + = 1;
Ένα μοναδικό χαρακτηριστικό αυτών των τελεστών είναι ότι μπορούμε να προθέσουμε ή να επιθέσουμε αυτούς τους τελεστές με τη μεταβλητή. Ως εκ τούτου, εάν το a είναι μεταβλητή και προθέτουμε τον τελεστή αύξησης θα είναι
++ α;
Αυτό ονομάζεται Pre-increment. Ομοίως, έχουμε και προ-μείωση.
Εάν προθέσουμε τη μεταβλητή a με έναν τελεστή αύξησης, θα έχουμε,
ένα ++;
Αυτή είναι η μετά την αύξηση. Ομοίως, έχουμε και μετά τη μείωση.
Η διαφορά μεταξύ της έννοιας του pre και του post εξαρτάται από τον τρόπο αξιολόγησης της έκφρασης και το αποτέλεσμα αποθηκεύεται.
Στην περίπτωση του τελεστή προ-αύξησης / μείωσης, η λειτουργία προσαύξησης / μείωσης πραγματοποιείται πρώτα και μετά το αποτέλεσμα μεταφέρεται σε μια τιμή. Ενώ για τις εργασίες μετά την αύξηση / μείωση, η τιμή αξιολογείται πρώτα και στη συνέχεια η αύξηση / μείωση πραγματοποιείται ανάλογα.
Παράδειγμα:
a = 5; b = 6;
++ α; # α = 6
σι-; # β = 6
-ένα; # α = 5
β ++; # 6
I / O μέσω της κονσόλας
Q # 15) Ποιοι είναι οι τελεστές εξαγωγής και εισαγωγής στο C ++; Εξηγήστε με παραδείγματα.
Απάντηση: Στη βιβλιοθήκη iostream.h του C ++, Κίνα , και κόστος είναι οι δύο ροές δεδομένων που χρησιμοποιούνται για είσοδο και έξοδο αντίστοιχα. Το Cout συνήθως κατευθύνεται στην οθόνη και το cin εκχωρείται στο πληκτρολόγιο.
'Cin' (χειριστής εξαγωγής): Χρησιμοποιώντας υπερφορτωμένο χειριστή >> με ροή cin, το C ++ χειρίζεται την τυπική είσοδο.
int age; cin>>age;
Όπως φαίνεται στο παραπάνω παράδειγμα, δηλώνεται μια ακέραια μεταβλητή «ηλικία» και στη συνέχεια περιμένει το cin (πληκτρολόγιο) να εισαγάγει τα δεδομένα. Το 'cin' επεξεργάζεται την είσοδο μόνο όταν πατηθεί το πλήκτρο RETURN.
'Cout' (τελεστής εισαγωγής): Αυτό χρησιμοποιείται σε συνδυασμό με την υπερφόρτωση<< operator. It directs the data that followed it into the cout stream.
Παράδειγμα:
csqa εξετάσεις & απαντήσεις pdf
cout<<”Hello, World!”; cout<<123;
Δομές και λειτουργίες ελέγχου
Δομές και βρόχοι ελέγχου
Q # 16) Ποια είναι η διαφορά μεταξύ βρόχου while and do while; Εξηγήστε με παραδείγματα.
Απάντηση: Η μορφή του loop loop στο C ++ είναι:
Ενώ (έκφραση)
{δηλώσεις;}
Το μπλοκ δήλωσης κάτω ενώ εκτελείται αρκεί η συνθήκη στη δεδομένη έκφραση να ισχύει.
Παράδειγμα:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<Στον παραπάνω κώδικα, ο βρόχος θα βγει απευθείας εάν το n είναι 0. Έτσι στον βρόχο while, η συνθήκη τερματισμού βρίσκεται στην αρχή του βρόχου και εάν πληρούται, δεν εκτελούνται επαναλήψεις του βρόχου.
Στη συνέχεια, θεωρούμε το do-while loop.
Η γενική μορφή του do-while είναι:
κάνουμε {statement;} ενώ (συνθήκη);
Παράδειγμα:
#include int main() { int n; cout<>n; do { cout<Στον παραπάνω κώδικα, μπορούμε να δούμε ότι η δήλωση μέσα στον βρόχο εκτελείται τουλάχιστον μία φορά καθώς η συνθήκη βρόχου είναι στο τέλος. Αυτές είναι οι κύριες διαφορές μεταξύ του while και του do-while.
Σε περίπτωση βρόχου while, μπορούμε να βγούμε απευθείας από τον βρόχο στην αρχή, εάν δεν πληρούται η συνθήκη, ενώ στον βρόχο do-while εκτελούμε τις δηλώσεις βρόχου τουλάχιστον μία φορά.
Λειτουργίες
Ε # 17) Τι εννοείτε με τον τύπο επιστροφής «άκυρο»;
Απάντηση: Όλες οι συναρτήσεις πρέπει να επιστρέφουν μια τιμή σύμφωνα με τη γενική σύνταξη.
Ωστόσο, σε περίπτωση που δεν θέλουμε μια συνάρτηση να επιστρέψει καμία τιμή, χρησιμοποιούμε ' κενός Για να το δείξει αυτό. Αυτό σημαίνει ότι χρησιμοποιούμε « κενός 'Για να δείξει ότι η συνάρτηση δεν έχει τιμή επιστροφής ή ότι επιστρέφει' κενός '.
Παράδειγμα:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
Q # 18) Εξηγήστε Pass by Value και Pass by Reference.
Απάντηση: Ενώ μεταβιβάζουμε παραμέτρους στη συνάρτηση χρησιμοποιώντας το 'Pass by Value', διαβιβάζουμε ένα αντίγραφο των παραμέτρων στη συνάρτηση.
Ως εκ τούτου, οποιεσδήποτε τροποποιήσεις γίνονται στις παραμέτρους στη λειτουργία που ονομάζεται, δεν επιστρέφονται στη λειτουργία κλήσης. Έτσι, οι μεταβλητές στη λειτουργία κλήσης παραμένουν αμετάβλητες.
Παράδειγμα:
void printFunc(int a,int b,int c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Παραγωγή:
x = 1
y = 3
z = 4
Όπως φαίνεται παραπάνω, παρόλο που οι παράμετροι άλλαξαν στη συνάρτηση που ονομάζεται, οι τιμές τους δεν αντικατοπτρίζονται στη συνάρτηση κλήσης καθώς μεταβιβάστηκαν από την τιμή.
Ωστόσο, εάν θέλουμε να επαναφέρουμε τις μεταβαλλόμενες τιμές από τη συνάρτηση στη συνάρτηση κλήσης, τότε χρησιμοποιούμε την τεχνική 'Pass by Reference'.
Για να το αποδείξουμε αυτό τροποποιούμε το παραπάνω πρόγραμμα ως εξής:
void printFunc(int& a,int& b,int& c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Παραγωγή:
x = 2
y = 6
z = 8
Όπως φαίνεται παραπάνω, οι τροποποιήσεις που έγιναν στις παραμέτρους στις συναρτούμενες συναρτήσεις μεταβιβάζονται στη λειτουργία κλήσης όταν χρησιμοποιούμε την τεχνική 'Διαβίβαση αναφοράς'. Αυτό συμβαίνει επειδή με τη χρήση αυτής της τεχνικής δεν διαβιβάζουμε ένα αντίγραφο των παραμέτρων, αλλά στην πραγματικότητα περνάμε την ίδια την αναφορά της μεταβλητής.
Q # 19) Τι είναι οι προεπιλεγμένες παράμετροι; Πώς αξιολογούνται στη συνάρτηση C ++;
Απάντηση: Η προεπιλεγμένη παράμετρος είναι μια τιμή που εκχωρείται σε κάθε παράμετρο κατά τη δήλωση μιας συνάρτησης.
Αυτή η τιμή χρησιμοποιείται εάν αυτή η παράμετρος παραμείνει κενή κατά την κλήση στη συνάρτηση. Για να καθορίσουμε μια προεπιλεγμένη τιμή για μια συγκεκριμένη παράμετρο, απλώς εκχωρούμε μια τιμή στην παράμετρο στη δήλωση συνάρτησης.
Εάν η τιμή δεν μεταβιβάζεται για αυτήν την παράμετρο κατά τη διάρκεια της κλήσης συνάρτησης, τότε ο μεταγλωττιστής χρησιμοποιεί την προεπιλεγμένη τιμή που παρέχεται. Εάν έχει καθοριστεί μια τιμή, τότε αυτή η προεπιλεγμένη τιμή έχει ενεργοποιηθεί και χρησιμοποιείται η τιμή που έχει περάσει.
Παράδειγμα:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Παραγωγή:
12
6
Όπως φαίνεται στον παραπάνω κώδικα, υπάρχουν δύο κλήσεις για λειτουργία πολλαπλασιασμού. Στην πρώτη κλήση, μόνο μία παράμετρος μεταδίδεται με μια τιμή. Σε αυτήν την περίπτωση, η δεύτερη παράμετρος είναι η προεπιλεγμένη τιμή που παρέχεται. Αλλά στη δεύτερη κλήση, καθώς και οι δύο τιμές παραμέτρων μεταβιβάζονται, η προεπιλεγμένη τιμή παρακάμπτεται και χρησιμοποιείται η τιμή μεταβίβασης.
Q # 20) Τι είναι μια συνάρτηση Inline στο C ++;
Απάντηση: Η συνάρτηση Inline είναι μια συνάρτηση που συντάσσεται από τον μεταγλωττιστή ως το σημείο κλήσης της συνάρτησης και ο κωδικός αντικαθίσταται σε αυτό το σημείο. Αυτό κάνει τη συλλογή πιο γρήγορα. Αυτή η συνάρτηση ορίζεται με το πρόθεμα του πρωτότυπου της συνάρτησης με τη λέξη-κλειδί 'inline'.
Τέτοιες λειτουργίες είναι επωφελείς μόνο όταν ο κωδικός της ενσωματωμένης συνάρτησης είναι μικρός και απλός. Παρόλο που μια συνάρτηση ορίζεται ως Inline, εξαρτάται πλήρως από τον μεταγλωττιστή για να την αξιολογήσει ως inline ή όχι.
Προηγμένη δομή δεδομένων
Πίνακες
Ε # 21) Γιατί οι πίνακες συνήθως επεξεργάζονται με βρόχο;
Απάντηση: Το Array χρησιμοποιεί το ευρετήριο για να διασχίσει κάθε ένα από τα στοιχεία του.
Εάν το A είναι ένας πίνακας, τότε κάθε ένα από τα στοιχεία του έχει πρόσβαση ως A (i). Προγραμματικά, το μόνο που απαιτείται για να λειτουργήσει αυτό είναι ένα επαναληπτικό μπλοκ με μια μεταβλητή βρόχου i που χρησιμεύει ως δείκτης (μετρητής) που αυξάνεται από 0 έως A.length-1.
Αυτό ακριβώς κάνει ένας βρόχος και αυτός είναι ο λόγος για τον οποίο επεξεργαζόμαστε πίνακες χρησιμοποιώντας βρόχους.
Q # 22) Δηλώστε τη διαφορά μεταξύ διαγραφής και διαγραφής ().
Απάντηση: Το 'delete ()' χρησιμοποιείται για την απελευθέρωση της μνήμης που έχει εκχωρηθεί σε έναν πίνακα που εκχωρήθηκε χρησιμοποιώντας νέο (). Το 'delete' χρησιμοποιείται για να απελευθερώσει ένα κομμάτι μνήμης που εκχωρήθηκε χρησιμοποιώντας νέο.
Q # 23) Τι συμβαίνει με αυτόν τον κωδικό;
T * p = νέο T (10);
διαγραφή p;
Απάντηση: Ο παραπάνω κώδικας είναι συντακτικά σωστός και θα συντάξει πρόστιμο.
Το μόνο πρόβλημα είναι ότι θα διαγράψει το πρώτο στοιχείο του πίνακα. Αν και διαγράφεται ολόκληρος ο πίνακας, θα κληθεί μόνο ο καταστροφέας του πρώτου στοιχείου και θα απελευθερωθεί η μνήμη για το πρώτο στοιχείο.
Q # 24) Ποια είναι η σειρά με την οποία καταστρέφονται τα αντικείμενα σε έναν πίνακα;
Απάντηση: Τα αντικείμενα σε έναν πίνακα καταστρέφονται με την αντίστροφη σειρά κατασκευής: Κατασκευάστηκε πρώτα, καταστράφηκε τελευταία.
Στο ακόλουθο παράδειγμα, η σειρά για τους καταστροφείς θα είναι (9), (8),…, a (1), a (0):
voiduserCode() { Car a(10); ... }
Δείκτες
Q # 25) Τι συμβαίνει με αυτόν τον κωδικό;
T * p = 0;
διαγραφή p;
Απάντηση: Στον παραπάνω κώδικα, ο δείκτης είναι μηδενικός δείκτης. Σύμφωνα με το πρότυπο C ++ 03, είναι απολύτως έγκυρο να καλείτε διαγραφή σε δείκτη NULL. Ο τελεστής διαγραφής θα φροντίσει εσωτερικά τον έλεγχο NULL.
Q # 26) Τι είναι μια μεταβλητή αναφοράς στο C ++;
Απάντηση: Μια μεταβλητή αναφοράς είναι ένα ψευδώνυμο όνομα για την υπάρχουσα μεταβλητή. Αυτό σημαίνει ότι τόσο το όνομα της μεταβλητής όσο και η μεταβλητή αναφοράς δείχνουν την ίδια θέση μνήμης. Ως εκ τούτου, κάθε φορά που η μεταβλητή ενημερώνεται, η αναφορά ενημερώνεται επίσης.
Παράδειγμα:
int a=10; int& b = a;
Εδώ, το b είναι η αναφορά του a.
Μαθήματα αποθήκευσης
Q # 27) Τι είναι μια κατηγορία αποθήκευσης; Αναφέρετε τις τάξεις αποθήκευσης στο C ++.
Απάντηση: Η κλάση αποθήκευσης καθορίζει τη ζωή ή το εύρος των συμβόλων, όπως μεταβλητές ή συναρτήσεις.
Το C ++ υποστηρίζει τις ακόλουθες κατηγορίες αποθήκευσης:
- Αυτο
- Στατικός
- Εξωτερικός
- Κανω ΕΓΓΡΑΦΗ
- Ευμετάβλητος
Q # 28) Εξηγήστε τον προσδιοριστή κλάσης Mutable Storage.
Απάντηση: Η μεταβλητή του μέλους ενός αντικειμένου σταθερής κλάσης δεν μπορεί να αλλάξει. Ωστόσο, δηλώνοντας τις μεταβλητές ως «μεταβλητές», μπορούμε να αλλάξουμε τις τιμές αυτών των μεταβλητών.
Ε # 29) Για ποια είναι η λέξη-κλειδί αυτόματη;
Απάντηση: Από προεπιλογή, κάθε τοπική μεταβλητή της συνάρτησης είναι αυτόματη, δηλαδή αυτο . Στην παρακάτω συνάρτηση και οι δύο μεταβλητές «i» και «j» είναι αυτόματες μεταβλητές.
void f() { int i; auto int j; }
ΣΗΜΕΙΩΣΗ : Μια καθολική μεταβλητή δεν είναι αυτόματη μεταβλητή.
Q # 30) Τι είναι μια στατική μεταβλητή;
Απάντηση: Μια στατική μεταβλητή είναι μια τοπική μεταβλητή που διατηρεί την αξία της στις κλήσεις συνάρτησης. Οι στατικές μεταβλητές δηλώνονται χρησιμοποιώντας τη λέξη-κλειδί «στατική». Οι αριθμητικές μεταβλητές που είναι στατικές έχουν την προεπιλεγμένη τιμή ως μηδέν.
Η ακόλουθη συνάρτηση θα εκτυπώσει 1 2 3 εάν καλείται τρεις φορές.
void f() { static int i; ++i; printf(“%d “,i); }
Εάν μια καθολική μεταβλητή είναι στατική, τότε η ορατότητά της περιορίζεται στον ίδιο πηγαίο κώδικα.
Q # 31) Ποιος είναι ο σκοπός του Extern Storage Specifier;
Απάντηση: Ο προσδιοριστής 'Extern' χρησιμοποιείται για την επίλυση του εύρους ενός καθολικού συμβόλου.
#include using nam espace std; main() { extern int i; cout< Στον παραπάνω κώδικα, το 'i' μπορεί να είναι ορατό έξω από το αρχείο όπου έχει οριστεί.
Q # 32) Εξηγήστε τον καθορισμό χώρου αποθήκευσης μητρώου.
Απάντηση: Η μεταβλητή 'Register' πρέπει να χρησιμοποιείται όποτε χρησιμοποιείται η μεταβλητή. Όταν μια μεταβλητή δηλώνεται με έναν προσδιοριστή 'register', τότε ο μεταγλωττιστής δίνει το μητρώο CPU για την αποθήκευσή του για να επιταχύνει την αναζήτηση της μεταβλητής.
Q # 33) Πότε να χρησιμοποιήσετε τα ορίσματα αναφοράς 'const' σε μια συνάρτηση;
Απάντηση: Η χρήση ορισμάτων αναφοράς 'const' σε μια συνάρτηση είναι επωφελής με διάφορους τρόπους:
- Το 'const' προστατεύει από σφάλματα προγραμματισμού που θα μπορούσαν να αλλάξουν δεδομένα.
- Ως αποτέλεσμα της χρήσης του 'const', η συνάρτηση είναι σε θέση να επεξεργαστεί τα πραγματικά και όχι τα πραγματικά ορίσματα const, κάτι που δεν είναι δυνατό όταν δεν χρησιμοποιείται το 'const'.
- Η χρήση μιας αναφοράς const θα επιτρέψει στη λειτουργία να δημιουργήσει και να χρησιμοποιήσει μια προσωρινή μεταβλητή με τον κατάλληλο τρόπο.
Τύποι δεδομένων δομής και καθορισμένων από τον χρήστη
Q # 34) Τι είναι μια τάξη;
Απάντηση: Η κλάση είναι ένας τύπος δεδομένων που καθορίζεται από το χρήστη στο C ++. Μπορεί να δημιουργηθεί για την επίλυση ενός συγκεκριμένου είδους προβλήματος. Μετά τη δημιουργία, ο χρήστης δεν απαιτείται να γνωρίζει τις λεπτομέρειες της λειτουργίας μιας τάξης.
Σε γενικές γραμμές, η τάξη ενεργεί ως σχεδιάγραμμα ενός έργου και μπορεί να περιλαμβάνει σε διάφορες παραμέτρους και λειτουργίες ή ενέργειες που λειτουργούν σε αυτές τις παραμέτρους. Αυτά ονομάζονται μέλη της τάξης.
Q # 35) Διαφορά μεταξύ κλάσης και δομής.
Απάντηση:
Δομή: Στη γλώσσα C, η δομή χρησιμοποιείται για να συνδυάσει διαφορετικούς τύπους τύπων δεδομένων μαζί. Οι μεταβλητές μέσα σε μια δομή ονομάζονται μέλη της δομής. Αυτά τα μέλη είναι από προεπιλογή δημόσια και μπορούν να προσεγγιστούν χρησιμοποιώντας το όνομα της δομής ακολουθούμενο από έναν τελεστή κουκκίδων και έπειτα το όνομα μέλους.
Τάξη: Η τάξη είναι διάδοχος της δομής. Το C ++ επεκτείνει τον ορισμό της δομής ώστε να περιλαμβάνει τις συναρτήσεις που λειτουργούν στα μέλη του. Από προεπιλογή, όλα τα μέλη της τάξης είναι ιδιωτικά.
Αντικειμενοστρεφής προγραμματισμός με C ++
Μαθήματα, Κατασκευαστές, Καταστροφείς
Q # 36) Τι είναι το Namespace;
Απάντηση: Το Namespace μας επιτρέπει να ομαδοποιήσουμε ένα σύνολο καθολικών τάξεων, αντικειμένων ή / και συναρτήσεων με ένα συγκεκριμένο όνομα.
Η γενική φόρμα για τη χρήση χώρων ονομάτων είναι:
αναγνωριστικό χώρου ονομάτων {namespace-body}
Όπου το αναγνωριστικό είναι οποιοδήποτε έγκυρο αναγνωριστικό και το namespace-body είναι το σύνολο κλάσεων, αντικειμένων και συναρτήσεων που περιλαμβάνονται στο χώρο ονομάτων. Οι χώροι ονομάτων είναι ιδιαίτερα χρήσιμοι στην περίπτωση που υπάρχει δυνατότητα για περισσότερα από ένα αντικείμενα να έχουν το ίδιο όνομα, με αποτέλεσμα συγκρούσεις ονόματος.
Ε # 37) Ποια είναι η χρήση της δήλωσης «χρήση»;
Απάντηση: Η χρήση της δήλωσης χρησιμοποιείται για την αναφορά ενός ονόματος από το χώρο ονομάτων χωρίς τον τελεστή ανάλυσης πεδίου.
Q # 38) Τι είναι το όνομα Mangling;
Απάντηση: Ο μεταγλωττιστής C ++ κωδικοποιεί τους τύπους παραμέτρων με λειτουργία / μέθοδο σε ένα μοναδικό όνομα. Αυτή η διαδικασία ονομάζεται mangling όνομα. Η αντίστροφη διαδικασία ονομάζεται διαχωριστική.
Παράδειγμα:
A :: b (int, long) const είναι μπερδεμένος ως «B__C3Ail» .
Για έναν κατασκευαστή, το όνομα της μεθόδου παραμένει εκτός.
Αυτό είναι A :: A (int, long) const είναι μπερδεμένος ως «C3Ail».
Q # 39) Ποια είναι η διαφορά μεταξύ ενός αντικειμένου και μιας κλάσης;
Απάντηση: Το Class είναι ένα σχέδιο ενός έργου ή προβλήματος που πρέπει να λυθεί και αποτελείται από μεταβλητές και μεθόδους. Αυτά ονομάζονται μέλη της τάξης. Δεν μπορούμε να αποκτήσουμε πρόσβαση σε μεθόδους ή μεταβλητές της τάξης από μόνη της, εκτός εάν δηλωθούν στατικές.
Για να αποκτήσουμε πρόσβαση στα μέλη της τάξης και να τα χρησιμοποιήσουμε, πρέπει να δημιουργήσουμε μια παρουσία μιας κλάσης που ονομάζεται Αντικείμενο. Η τάξη έχει απεριόριστη διάρκεια ζωής, ενώ ένα αντικείμενο έχει περιορισμένη διάρκεια ζωής μόνο.
Q # 40) Ποιοι είναι οι διάφοροι προσδιοριστές πρόσβασης στο C ++;
Απάντηση: Το C ++ υποστηρίζει τους ακόλουθους προσδιοριστές πρόσβασης:
- Δημόσιο: Τα μέλη δεδομένων και οι λειτουργίες είναι προσβάσιμες εκτός της τάξης.
- Ιδιωτικός: Τα μέλη δεδομένων και οι λειτουργίες δεν είναι προσβάσιμα εκτός της τάξης. Η εξαίρεση είναι η χρήση μιας τάξης φίλων.
- Προστατευμένο: Τα μέλη δεδομένων και οι λειτουργίες είναι προσβάσιμες μόνο στις παραγόμενες κατηγορίες
Παράδειγμα:
Περιγράψτε ΙΔΙΩΤΙΚΑ, ΠΡΟΣΤΑΤΕΥΜΕΝΑ και ΔΗΜΟΣΙΑ μαζί με τις διαφορές τους και δώστε παραδείγματα.
class A{ int x; int y; public int a; protected bool flag; public A() : x(0) , y(0) {} //default (no argument) constructor }; main(){ A MyObj; MyObj.x = 5; // Compiler will issue a ERROR as x is private int x = MyObj.x; // Compiler will issue a compile ERROR MyObj.x is private MyObj.a = 10; // no problem; a is public member int col = MyObj.a; // no problem MyObj.flag = true; // Compiler will issue a ERROR; protected values are read only bool isFlag = MyObj.flag; // no problem
Q # 41) Τι είναι ο Κατασκευαστής και πώς ονομάζεται;
Απάντηση: Ο κατασκευαστής είναι μια συνάρτηση μέλους της κλάσης που έχει το ίδιο όνομα με την τάξη. Χρησιμοποιείται κυρίως για την προετοιμασία των μελών της τάξης. Από προεπιλογή, οι κατασκευαστές είναι δημόσιοι.
Υπάρχουν δύο τρόποι με τους οποίους καλούνται οι κατασκευαστές:
- Σιωπηρά: Οι κατασκευαστές καλούνται σιωπηρά από τον μεταγλωττιστή όταν δημιουργείται ένα αντικείμενο της κλάσης. Αυτό δημιουργεί ένα αντικείμενο σε μια στοίβα.
- Άμεση κλήση: Όταν το αντικείμενο μιας κλάσης δημιουργείται χρησιμοποιώντας νέο, οι κατασκευαστές καλούνται ρητά. Αυτό συνήθως δημιουργεί ένα αντικείμενο σε έναν σωρό.
Παράδειγμα:
class A{ int x; int y; public A() : x(0) , y(0) {} //default (no argument) constructor }; main() { A Myobj; // Implicit Constructor call. In order to allocate memory on stack, //the default constructor is implicitly called. A * pPoint = new A(); // Explicit Constructor call. In order to allocate //memory on HEAP we call the default constructor. }
Q # 42) Τι είναι ο ΚΑΤΑΣΚΕΥΑΣΤΗΣ ΑΝΤΙΓΡΑΦΗΣ και πότε ονομάζεται;
Απάντηση: Ένας κατασκευαστής αντιγράφων είναι ένας κατασκευαστής που δέχεται ένα αντικείμενο της ίδιας κλάσης με την παράμετρο του και αντιγράφει τα μέλη δεδομένων του στο αντικείμενο στο αριστερό μέρος της εργασίας. Είναι χρήσιμο όταν πρέπει να κατασκευάσουμε ένα νέο αντικείμενο της ίδιας τάξης.
Παράδειγμα:
class A{ int x; int y; public int color; public A() : x(0) , y(0) {} //default (no argument) constructor public A( const A& ) ; }; A::A( const A & p ) { this->x = p.x; this->y = p.y; this->color = p.color; } main() { A Myobj; Myobj.color = 345; A Anotherobj = A( Myobj ); // now Anotherobj has color = 345 }
Q # 43) Τι είναι ένας προεπιλεγμένος κατασκευαστής;
Απάντηση: Ο προεπιλεγμένος κατασκευαστής είναι ένας κατασκευαστής που είτε δεν έχει ορίσματα είτε εάν υπάρχουν, τότε όλα είναι προεπιλεγμένα ορίσματα.
Παράδειγμα:
πώς να ανοίξετε τα αρχεία xml στη λέξη
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
Q # 44) Τι είναι ένας κατασκευαστής μετατροπής;
Απάντηση: Είναι ένας κατασκευαστής που δέχεται ένα επιχείρημα διαφορετικού τύπου. Οι κατασκευαστές μετατροπής χρησιμοποιούνται κυρίως για τη μετατροπή από τον ένα τύπο στον άλλο.
Q # 45) Τι είναι ένας ρητός κατασκευαστής;
Απάντηση: Ένας κατασκευαστής μετατροπών δηλώνεται με τη ρητή λέξη-κλειδί. Ο μεταγλωττιστής δεν χρησιμοποιεί έναν ρητό κατασκευαστή για να εφαρμόσει μια σιωπηρή μετατροπή τύπων. Ο σκοπός του προορίζεται αποκλειστικά για κατασκευή.
Q # 46) Ποιος είναι ο ρόλος της στατικής λέξης-κλειδιού για μια μεταβλητή μέλους της τάξης;
Απάντηση: Η μεταβλητή στατικού μέλους μοιράζεται μια κοινή μνήμη σε όλα τα αντικείμενα που δημιουργήθηκαν για την αντίστοιχη κλάση. Δεν χρειάζεται να αναφερόμαστε στη μεταβλητή στατικού μέλους χρησιμοποιώντας ένα αντικείμενο. Ωστόσο, μπορείτε να έχετε πρόσβαση χρησιμοποιώντας το ίδιο το όνομα της τάξης.
Ε # 47) Εξηγήστε τη λειτουργία στατικού μέλους.
Απάντηση: Μια λειτουργία στατικού μέλους μπορεί να έχει πρόσβαση μόνο στη μεταβλητή στατικού μέλους της κλάσης. Όπως και με τις μεταβλητές στατικών μελών, μπορεί επίσης να προσπελαστεί μια λειτουργία στατικού μέλους χρησιμοποιώντας το όνομα κλάσης.
Ε # 48) Ποια είναι η σειρά με την οποία καταστρέφονται τα τοπικά αντικείμενα;
Απάντηση: Σκεφτείτε να ακολουθήσετε ένα κομμάτι κώδικα:
Class A{ …. }; int main() { A a; A b; ... }
Στην κύρια λειτουργία, έχουμε δημιουργήσει δύο αντικείμενα το ένα μετά το άλλο. Δημιουργούνται με σειρά, πρώτα και μετά β. Αλλά όταν αυτά τα αντικείμενα διαγραφούν ή εάν δεν είναι το πεδίο εφαρμογής, ο καταστροφέας για καθένα θα κληθεί με την αντίστροφη σειρά με την οποία κατασκευάστηκαν.
Ως εκ τούτου, ο καταστροφέας του b θα καλείται πρώτα ακολουθούμενος από a. Ακόμα κι αν έχουμε μια σειρά αντικειμένων, θα καταστραφούν με τον ίδιο τρόπο στην αντίστροφη σειρά της δημιουργίας τους.
Υπερφόρτωση
Q # 49) Εξηγήστε τη λειτουργία Υπερφόρτωση και Υπερφόρτωση χειριστή.
Απάντηση: Το C ++ υποστηρίζει το OOPs concept Polymorphism που σημαίνει «πολλές μορφές».
Στο C ++ έχουμε δύο τύπους πολυμορφισμού, δηλ. Πολυμορφισμό χρόνου μεταγλώττισης και πολυμορφισμό χρόνου εκτέλεσης. Ο πολυμορφισμός του χρόνου μεταγλώττισης επιτυγχάνεται χρησιμοποιώντας μια τεχνική υπερφόρτωσης. Η υπερφόρτωση σημαίνει απλώς την παροχή πρόσθετης σημασίας σε μια οντότητα διατηρώντας ανέπαφη τη βάση της.
Το C ++ υποστηρίζει δύο τύπους υπερφόρτωσης:
Υπερφόρτωση λειτουργίας:
Η υπερφόρτωση λειτουργιών είναι μια τεχνική που επιτρέπει στον προγραμματιστή να έχει περισσότερες από μία λειτουργίες με το ίδιο όνομα αλλά διαφορετική λίστα παραμέτρων. Με άλλα λόγια, υπερφορτώνουμε τη συνάρτηση με διαφορετικά ορίσματα, είτε πρόκειται για τον τύπο ορισμάτων, τον αριθμό των ορισμάτων ή τη σειρά των ορισμάτων.
Η υπερφόρτωση λειτουργίας δεν επιτυγχάνεται ποτέ στον τύπο επιστροφής της.
Υπερφόρτωση χειριστή:
Αυτός είναι ένας ακόμη τύπος πολυμορφισμού μεταγλώττισης που υποστηρίζεται από το C ++. Στην υπερφόρτωση του χειριστή, ένας χειριστής είναι υπερφορτωμένος, έτσι ώστε να μπορεί να λειτουργεί στους τύπους που καθορίζονται από το χρήστη, καθώς και με τους τελεστές του τυπικού τύπου δεδομένων. Αλλά κάνοντας αυτό, ο τυπικός ορισμός αυτού του χειριστή διατηρείται ανέπαφος.
Για παράδειγμα, Ένας τελεστής προσθήκης (+) που λειτουργεί σε αριθμητικούς τύπους δεδομένων μπορεί να υπερφορτωθεί για να λειτουργήσει σε δύο αντικείμενα όπως ένα αντικείμενο σύνθετης κατηγορίας αριθμών.
Q # 50) Ποια είναι η διαφορά μεταξύ της υπερφόρτωσης μεθόδου και της παράκαμψης μεθόδου στο C ++;
Απάντηση: Η μέθοδος υπερφόρτωσης έχει συναρτήσεις με το ίδιο όνομα, αλλά διαφορετικές λίστες επιχειρημάτων. Αυτή είναι μια μορφή πολυμορφισμού μεταγλώττισης.
Η παράκαμψη μεθόδου εμφανίζεται στην εικόνα όταν ξαναγράφουμε τη μέθοδο που προέρχεται από μια βασική κλάση. Η παράκαμψη μεθόδου χρησιμοποιείται κατά την αντιμετώπιση πολυμορφισμού χρόνου εκτέλεσης ή εικονικών συναρτήσεων.
Q # 51) Ποια είναι η διαφορά μεταξύ ενός Κατασκευαστή αντιγραφής και ενός υπερφορτωμένου Διαχειριστής ανάθεσης;
Απάντηση: Ένας κατασκευαστής αντιγράφων και ένας υπερφορτωμένος χειριστής ανάθεσης εξυπηρετούν βασικά τον ίδιο σκοπό, δηλαδή την εκχώρηση του περιεχομένου ενός αντικειμένου σε άλλο. Ωστόσο, υπάρχει μια διαφορά μεταξύ των δύο.
Παράδειγμα:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
Στο παραπάνω παράδειγμα, η δεύτερη δήλωση c1 = c2 είναι μια υπερφορτωμένη δήλωση εκχώρησης.
Εδώ, και τα δύο c1 και c2 είναι ήδη υπάρχοντα αντικείμενα και τα περιεχόμενα του c2 αντιστοιχίζονται στο αντικείμενο c1. Ως εκ τούτου, για υπερφόρτωση δήλωσης ανάθεσης και τα δύο αντικείμενα πρέπει να δημιουργηθούν ήδη.
Η επόμενη δήλωση, το σύνθετο c3 = c2 είναι ένα παράδειγμα του κατασκευαστή αντιγράφων. Εδώ, τα περιεχόμενα του c2 αντιστοιχίζονται σε ένα νέο αντικείμενο c3, που σημαίνει ότι ο κατασκευαστής αντιγράφων δημιουργεί ένα νέο αντικείμενο κάθε φορά που εκτελείται.
Q # 52) Ονομάστε τους χειριστές που δεν μπορούν να υπερφορτωθούν.
Απάντηση:
- sizeof - sizeof χειριστή
- . - Χειριστής κουκίδων
- . * - χειριστής αποαναφοράς
- -> - χειριστής αποαναφοράς μελών
- :: - τελεστής ανάλυσης πεδίου
- ;: - χειριστής υπό όρους
Q # 53) Η συνάρτηση μπορεί να υπερφορτωθεί με βάση την παράμετρο που είναι μια τιμή ή μια αναφορά. Εξηγήστε εάν η δήλωση είναι αληθινή.
Απάντηση: Ψευδής. Και τα δύο, το Passing by value και το Passing by referensi μοιάζουν με τον καλούντα.
Q # 54) Ποια είναι τα οφέλη της υπερφόρτωσης χειριστή;
Απάντηση: Με την υπερφόρτωση των τυπικών τελεστών σε μια κατηγορία, μπορούμε να επεκτείνουμε την έννοια αυτών των τελεστών, έτσι ώστε να μπορούν επίσης να λειτουργούν σε άλλα αντικείμενα που ορίζονται από το χρήστη.
Η υπερφόρτωση της λειτουργίας μας επιτρέπει να μειώσουμε την πολυπλοκότητα του κώδικα και να τον καταστήσουμε πιο σαφή και ευανάγνωστο καθώς μπορούμε να έχουμε τα ίδια ονόματα λειτουργιών με διαφορετικές λίστες ορίσματος.
Κληρονομία
Q # 55) Τι είναι η κληρονομικότητα;
Απάντηση: Η κληρονομικότητα είναι μια διαδικασία με την οποία μπορούμε να αποκτήσουμε τα χαρακτηριστικά μιας υπάρχουσας οντότητας και να δημιουργήσουμε μια νέα οντότητα προσθέτοντας περισσότερα χαρακτηριστικά σε αυτήν.
Όσον αφορά το C ++, η κληρονομιά δημιουργεί μια νέα τάξη αντλώντας την από μια υπάρχουσα τάξη, έτσι ώστε αυτή η νέα τάξη να έχει τις ιδιότητες της μητρικής της τάξης καθώς και τη δική της.
Q # 56) Ποια είναι τα πλεονεκτήματα της κληρονομιάς;
Απάντηση: Η κληρονομικότητα επιτρέπει την επαναχρησιμοποίηση του κώδικα, εξοικονομώντας έτσι χρόνο στην ανάπτυξη κώδικα.
Κληρονομώντας, χρησιμοποιούμε ένα λογισμικό υψηλής ποιότητας χωρίς σφάλματα που μειώνει τα μελλοντικά προβλήματα.
Ε # 57) Το C ++ υποστηρίζει Πολυεπίπεδη και Πολλαπλές Κληρονομικότητες;
Απάντηση: Ναί.
Ε # 58) Τι είναι οι πολλαπλές κληρονομιές (εικονική κληρονομιά); Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματά του;
Απάντηση: Σε πολλές κληρονομίες, έχουμε περισσότερες από μία βασικές τάξεις από τις οποίες μπορεί να κληρονομήσει μια παράγωγη τάξη. Ως εκ τούτου, μια παράγωγη κλάση λαμβάνει τα χαρακτηριστικά και τις ιδιότητες περισσότερων από μία βασικών κατηγοριών.
Για παράδειγμα , μια τάξη οδηγός θα έχει δύο βασικές κατηγορίες, δηλαδή, υπάλληλος και ένα άτομο επειδή ο οδηγός είναι υπάλληλος καθώς και άτομο. Αυτό είναι επωφελές επειδή η κατηγορία οδηγού μπορεί να κληρονομήσει τις ιδιότητες του υπαλλήλου καθώς και της κατηγορίας ατόμων.
Στην περίπτωση όμως ενός υπαλλήλου και ενός ατόμου, η τάξη θα έχει κοινές ιδιότητες. Ωστόσο, θα προκύψει μια διφορούμενη κατάσταση καθώς η κλάση οδηγού δεν θα γνωρίζει τις κλάσεις από τις οποίες πρέπει να κληρονομηθούν οι κοινές ιδιότητες. Αυτό είναι το μεγαλύτερο μειονέκτημα των πολλαπλών κληρονομιών.
Ε # 59) Εξηγήστε τις σχέσεις τάξης ISA και HASA. Πώς θα εφαρμόζατε καθε?
Απάντηση: Η σχέση 'ISA' συνήθως εμφανίζει κληρονομιά, καθώς υποδηλώνει ότι μια κατηγορία 'ISA' εξειδικευμένη έκδοση μιας άλλης τάξης. Για παράδειγμα , Ένας υπάλληλος ISA. Αυτό σημαίνει ότι μια τάξη υπαλλήλων κληρονομείται από την κατηγορία προσώπων.
Σε αντίθεση με το 'ISA', η σχέση 'HASA' απεικονίζει ότι μια οντότητα μπορεί να έχει μια άλλη οντότητα καθώς το μέλος της ή μια τάξη έχει ένα άλλο αντικείμενο ενσωματωμένο σε αυτήν.
Λαμβάνοντας λοιπόν το ίδιο παράδειγμα μιας τάξης υπαλλήλων, ο τρόπος με τον οποίο συσχετίζουμε την τάξη μισθών με τον υπάλληλο δεν είναι κληρονομική, αλλά συμπεριλαμβάνοντας ή περιέχοντας το αντικείμενο μισθού στην τάξη υπαλλήλων. Η σχέση «HASA» παρουσιάζεται καλύτερα με περιορισμό ή συγκέντρωση.
Ε # 60) Κληρονομεί μια παράγωγη τάξη ή δεν κληρονομεί;
Απάντηση: Όταν μια παράγωγη κλάση κατασκευάζεται από μια συγκεκριμένη βασική κλάση, βασικά κληρονομεί όλα τα χαρακτηριστικά και τα συνηθισμένα μέλη της βασικής τάξης. Υπάρχουν όμως ορισμένες εξαιρέσεις σε αυτόν τον κανόνα. Για παράδειγμα, μια παράγωγη τάξη δεν κληρονομεί τους κατασκευαστές και τους καταστροφείς της βασικής τάξης.
Κάθε τάξη έχει τους δικούς της κατασκευαστές και καταστροφείς. Η παράγωγη τάξη επίσης δεν κληρονομεί τον χειριστή ανάθεσης της βασικής τάξης και τους φίλους της τάξης. Ο λόγος είναι ότι αυτές οι οντότητες είναι συγκεκριμένες για μια συγκεκριμένη τάξη και εάν προέρχεται μια άλλη τάξη ή εάν είναι ο φίλος αυτής της τάξης, τότε δεν μπορούν να μεταφερθούν σε αυτές.
Πολυμορφισμός
Q # 61) Τι είναι ο πολυμορφισμός;
Απάντηση: Η βασική ιδέα πίσω από τον πολυμορφισμό είναι σε πολλές μορφές. Στο C ++, έχουμε δύο τύπους πολυμορφισμού:
(i) Πολυμορφισμός μεταγλώττισης
Στο πολυμορφισμό του χρόνου μεταγλώττισης, επιτυγχάνουμε πολλές μορφές υπερφορτώνοντας. Ως εκ τούτου, έχουμε υπερφόρτωση χειριστή και υπερφόρτωση λειτουργίας. (Το έχουμε ήδη καλύψει παραπάνω)
(ii) Πολυμορφισμός χρόνου εκτέλεσης
Αυτός είναι ο πολυμορφισμός για τάξεις και αντικείμενα. Γενική ιδέα είναι ότι μια βασική τάξη μπορεί να κληρονομηθεί από διάφορες τάξεις. Ένας δείκτης κατηγορίας βάσης μπορεί να δείχνει στην κλάση θυγατρικών και ένας πίνακας βασικής κατηγορίας μπορεί να αποθηκεύσει διαφορετικά αντικείμενα παιδικής τάξης.
Αυτό σημαίνει ότι ένα αντικείμενο αντιδρά διαφορετικά στην ίδια κλήση λειτουργίας. Αυτός ο τύπος πολυμορφισμού μπορεί να χρησιμοποιήσει έναν μηχανισμό εικονικής λειτουργίας.
Q # 62) Τι είναι οι εικονικές συναρτήσεις;
Απάντηση: Μια εικονική συνάρτηση επιτρέπει στις παραγόμενες κλάσεις να αντικαταστήσουν την υλοποίηση που παρέχεται από την βασική κλάση.
Κάθε φορά που έχουμε συναρτήσεις με το ίδιο όνομα στη βάση καθώς και στην παράγωγη κλάση, δημιουργείται μια ασάφεια όταν προσπαθούμε να αποκτήσουμε πρόσβαση στο αντικείμενο παιδικής κλάσης χρησιμοποιώντας έναν δείκτη κατηγορίας βάσης. Καθώς χρησιμοποιούμε έναν δείκτη κατηγορίας βάσης, η συνάρτηση που καλείται είναι η συνάρτηση βασικής κλάσης με το ίδιο όνομα.
Για να διορθώσουμε αυτήν την ασάφεια χρησιμοποιούμε τη λέξη-κλειδί «εικονική» πριν από το πρωτότυπο της συνάρτησης στη βασική κλάση. Με άλλα λόγια, κάνουμε αυτήν την πολυμορφική συνάρτηση Virtual. Χρησιμοποιώντας μια εικονική συνάρτηση, μπορούμε να αφαιρέσουμε την ασάφεια και να έχουμε πρόσβαση σε όλες τις λειτουργίες της παιδικής τάξης σωστά χρησιμοποιώντας ένα δείκτη βασικής κατηγορίας.
Q # 63) Δώστε ένα παράδειγμα πολυμορφισμού χρόνου εκτέλεσης / εικονικών συναρτήσεων.
Απάντηση:
class SHAPE{ public virtual Draw() = 0; //abstract class with a pure virtual method }; class CIRCLE: public SHAPE{ public int r; public Draw() { this->drawCircle(0,0,r); } }; class SQUARE: public SHAPE{ public int a; public Draw() { this->drawSquare(0,0,a,a); } }; int main() { SHAPE shape1*; SHAPE shape2*; CIRCLE c1; SQUARE s1; shape1 = &c1; shape2 = &s1; coutΣτον παραπάνω κώδικα, η κλάση SHAPE έχει μια καθαρή εικονική συνάρτηση και είναι μια αφηρημένη τάξη (δεν μπορεί να τεκμηριωθεί). Κάθε τάξη προέρχεται από τη συνάρτηση SHAPE υλοποίησης Draw () με τον δικό της τρόπο.
Επιπλέον, κάθε συνάρτηση Draw είναι εικονική, έτσι ώστε όταν χρησιμοποιούμε ένα δείκτη κλάσης βάσης (SHAPE) κάθε φορά με το αντικείμενο των παραγόμενων κλάσεων (Circle and SQUARE), τότε καλούνται κατάλληλες συναρτήσεις Draw.
Q # 64) Τι εννοείτε με τις καθαρές εικονικές λειτουργίες;
Απάντηση: A Pure Virtual Member Function είναι μια συνάρτηση μέλους στην οποία η βασική κλάση αναγκάζει τις παραγόμενες κλάσεις να παρακάμψουν. Κανονικά, αυτή η συνάρτηση μέλους δεν έχει εφαρμογή. Οι καθαρές εικονικές συναρτήσεις εξισώνονται στο μηδέν.
Παράδειγμα:
class Shape { public: virtual void draw() = 0; };
Η βασική κλάση που έχει καθαρή εικονική συνάρτηση ως μέλος της μπορεί να χαρακτηριστεί ως «αφηρημένη τάξη». Αυτή η τάξη δεν μπορεί να τεκμηριωθεί και συνήθως λειτουργεί ως σχεδιάγραμμα που έχει πολλές υποκατηγορίες με περαιτέρω εφαρμογή.
Q # 65) Τι είναι οι εικονικοί κατασκευαστές / καταστροφείς;
Απάντηση:
Εικονικοί καταστροφείς: Όταν χρησιμοποιούμε έναν δείκτη κλάσης βάσης που δείχνει ένα παράγωγο αντικείμενο κλάσης και το χρησιμοποιούμε για να το καταστρέψουμε, τότε αντί να καλέσουμε τον παραγόμενο κλάδο καταστροφής, καλείται ο καταστροφέας βασικής κλάσης.
Παράδειγμα:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Όπως φαίνεται στο παραπάνω παράδειγμα, όταν λέμε διαγραφή α, ο καταστροφέας καλείται αλλά είναι στην πραγματικότητα ο καταστροφέας κατηγορίας βάσης. Αυτό δημιουργεί την αμφισημία ότι όλη η μνήμη που διατηρείται από το b δεν θα εκκαθαριστεί σωστά.
Αυτό το πρόβλημα μπορεί να λυθεί χρησιμοποιώντας την έννοια «Virtual Destructor».
Αυτό που κάνουμε είναι, κάνουμε τον κατασκευαστή της βασικής τάξης 'Εικονικό' έτσι ώστε όλοι οι καταστροφικοί τάξη θυγατρικών να γίνουν επίσης εικονικοί και όταν διαγράφουμε το αντικείμενο της βασικής κλάσης που δείχνει το αντικείμενο της παραγόμενης κλάσης, καλείται ο κατάλληλος καταστροφέας και όλα τα αντικείμενα διαγράφονται σωστά.
Αυτό φαίνεται ως εξής:
διαφορά μεταξύ σιωπηρής και ρητής αναμονής στο σελήνιο
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Εικονικό εργαλείο δημιουργίας : Οι κατασκευαστές δεν μπορούν να είναι εικονικοί. Η δήλωση ενός κατασκευαστή ως εικονικής συνάρτησης είναι σφάλμα σύνταξης.
Φίλε
Q # 66) Τι είναι η λειτουργία φίλου;
Απάντηση: Η τάξη C ++ δεν επιτρέπει την πρόσβαση στα ιδιωτικά και προστατευμένα μέλη της εκτός της τάξης. Αλλά αυτός ο κανόνας μπορεί να παραβιαστεί χρησιμοποιώντας το ' Φίλε ' λειτουργία.
Όπως υποδηλώνει το ίδιο το όνομα, η λειτουργία φίλου είναι μια εξωτερική συνάρτηση που είναι φίλος της τάξης. Προκειμένου η λειτουργία φίλου να έχει πρόσβαση στις ιδιωτικές και προστατευμένες μεθόδους της τάξης, θα πρέπει να έχουμε ένα πρωτότυπο της λειτουργίας φίλου με τη λέξη-κλειδί «φίλος» που περιλαμβάνεται στο μάθημα.
Q # 67) Τι είναι μια τάξη φίλων;
Απάντηση: Τα μαθήματα φίλων χρησιμοποιούνται όταν πρέπει να παρακάμψουμε τον κανόνα για ιδιωτικούς και προστατευμένους προσδιοριστές πρόσβασης, έτσι ώστε δύο τάξεις να μπορούν να συνεργάζονται στενά μεταξύ τους.
Ως εκ τούτου, μπορούμε να έχουμε μια τάξη φίλων για να είμαστε φίλοι μιας άλλης τάξης. Με αυτόν τον τρόπο, τα μαθήματα φίλων μπορούν να διατηρήσουν ιδιωτικά, απρόσιτα πράγματα όπως είναι.
Όταν έχουμε μια απαίτηση για πρόσβαση στην εσωτερική υλοποίηση μιας τάξης (ιδιωτικό μέλος) χωρίς να αποκαλύπτουμε τις λεπτομέρειες κάνοντας το κοινό, πηγαίνουμε για λειτουργίες φίλων.
Προηγμένο C ++
Πρότυπα
Q # 68) Τι είναι το πρότυπο;
Απάντηση: Τα πρότυπα επιτρέπουν τη δημιουργία λειτουργιών που είναι ανεξάρτητες από τον τύπο δεδομένων (γενικές) και μπορούν να πάρουν οποιονδήποτε τύπο δεδομένων ως παραμέτρους και τιμή επιστροφής χωρίς να χρειάζεται να υπερφορτώσετε τη λειτουργία με όλους τους πιθανούς τύπους δεδομένων. Τα πρότυπα πληρούν σχεδόν τη λειτουργικότητα μιας μακροεντολής.
Το πρωτότυπο του είναι οποιοδήποτε από τα ακόλουθα:
πρότυπο αναγνωρίζω > function_declaration;
πρότυπο αναγνωρίζω > function_declaration;
Η μόνη διαφορά μεταξύ των δύο πρωτοτύπων είναι η χρήση κατηγορίας λέξεων-κλειδιών ή ονόματος ονόματος. Η βασική λειτουργικότητά τους να είναι γενική παραμένει η ίδια.
Χειρισμός εξαίρεσης
Q # 69) Τι είναι ο χειρισμός εξαίρεσης; Υποστηρίζει το C ++ Exception Handling;
Απάντηση: Ναι, το C ++ υποστηρίζει τον χειρισμό εξαιρέσεων.
Δεν μπορούμε να διασφαλίσουμε ότι ο κώδικας θα εκτελείται κανονικά ανά πάσα στιγμή. Μπορεί να υπάρχουν ορισμένες καταστάσεις που ενδέχεται να αναγκάσουν τον κώδικα που γράφτηκε από εμάς να δυσλειτουργεί, παρόλο που είναι χωρίς σφάλματα. Αυτή η δυσλειτουργία του κώδικα ονομάζεται Εξαίρεση .
Όταν έχει συμβεί εξαίρεση, ο μεταγλωττιστής πρέπει να το πετάξει, ώστε να γνωρίζουμε ότι έχει συμβεί μια εξαίρεση. Όταν έχει γίνει εξαίρεση, ο μεταγλωττιστής πρέπει να διασφαλίσει ότι γίνεται σωστά, έτσι ώστε η ροή του προγράμματος να συνεχίζεται ή να τερματίζεται σωστά. Αυτό ονομάζεται το χειρισμός μιας εξαίρεσης.
Έτσι, στο C ++, έχουμε τρεις λέξεις-κλειδιά, δηλαδή προσπαθήστε , βολή και σύλληψη που βρίσκονται σε εξαίρεση.
Η γενική σύνταξη για το μπλοκ εξαιρέσεων είναι:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Όπως φαίνεται παραπάνω, ο κώδικας που ενδεχομένως δυσλειτουργεί βρίσκεται κάτω από το μπλοκ δοκιμής. Όταν ο κώδικας δυσλειτουργεί, δημιουργείται μια εξαίρεση. Αυτή η εξαίρεση στη συνέχεια πιάνεται κάτω από το μπλοκ αλιευμάτων και αντιμετωπίζεται, δηλαδή λαμβάνεται κατάλληλη δράση.
Ε # 70) Σχολιάστε τις τυπικές εξαιρέσεις C ++;
Απάντηση: Το C ++ υποστηρίζει ορισμένες τυπικές εξαιρέσεις που μπορούν να εντοπιστούν αν βάλουμε τον κώδικα στο μπλοκ δοκιμής. Αυτές οι εξαιρέσεις αποτελούν μέρος της βασικής κλάσης ' std :: εξαίρεση ». Αυτή η κλάση ορίζεται στο αρχείο κεφαλίδας C ++.
Λίγα παραδείγματα εξαιρέσεων που υποστηρίζονται από αυτήν την τάξη περιλαμβάνουν:
bad_alloc - ρίχτηκε από το «νέο»
runtime_error - ρίχνεται για σφάλματα χρόνου εκτέλεσης
bad_typeid - ρίχνεται βάσει τύπου id
Εισαγωγή στην τυπική βιβλιοθήκη προτύπων
Ε # 71) Τι είναι μια τυπική βιβλιοθήκη προτύπων (STL); Ποιοι είναι οι διάφοροι τύποι εμπορευματοκιβωτίων STL;
Απάντηση: Μια τυπική βιβλιοθήκη προτύπων (STL) είναι μια βιβλιοθήκη προτύπων κοντέινερ εγκεκριμένη από την επιτροπή ANSI για συμπερίληψη στην τυπική προδιαγραφή C ++. Έχουμε διάφορους τύπους κοντέινερ STL ανάλογα με τον τρόπο αποθήκευσης των στοιχείων.
- Ουρά, στοίβα - Αυτά είναι τα ίδια με την παραδοσιακή ουρά και στοίβα και ονομάζονται προσαρμοστικά δοχεία.
- Ορισμός, Χάρτης - Αυτά είναι βασικά κοντέινερ που έχουν ζεύγη κλειδιών / τιμών και είναι συσχετιστικά στη φύση.
- Διάνυσμα, και - Αυτά είναι διαδοχικά στη φύση και έχουν ομοιότητες με πίνακες.
Q # 72) Τι είναι η τάξη Iterator;
Απάντηση: Στο C ++, μια κλάση κοντέινερ είναι μια συλλογή διαφορετικών αντικειμένων.
Εάν πρέπει να διασχίσουμε αυτήν τη συλλογή αντικειμένων, δεν μπορούμε να το κάνουμε χρησιμοποιώντας απλές μεταβλητές ευρετηρίου. Ως εκ τούτου, έχουμε μια ειδική τάξη στο STL που ονομάζεται Επαναληπτής κλάση που μπορεί να χρησιμοποιηθεί για να διαπεράσετε τα περιεχόμενα της κατηγορίας κοντέινερ.
Περιλαμβάνονται οι διάφορες κατηγορίες επαναληπτών iterators εισόδου, iterators εξόδου, forward iterators, αμφίδρομες επαναλήψεις, τυχαία πρόσβαση κ.λπ.
Q # 73) Ποια είναι η διαφορά μεταξύ ενός εξωτερικού επαναλήπτη και ενός εσωτερικού επαναλήπτη; Περιγράψτε ένα πλεονέκτημα του External Iterator.
Απάντηση: Εφαρμόζεται ένας εσωτερικός επαναληπτής με συναρτήσεις μελών της κλάσης που έχουν στοιχεία για να περάσουν.
Ένα εξωτερικό επαναληπτικό πρόγραμμα εφαρμόζεται ως ξεχωριστή κλάση που μπορεί να συνδεθεί με το αντικείμενο στο οποίο υπάρχουν αντικείμενα που πρέπει να περάσουν. Το βασικό πλεονέκτημα ενός εξωτερικού επαναληπτή είναι ότι είναι εύκολο να εφαρμοστεί καθώς εφαρμόζεται ως ξεχωριστή τάξη.
Δεύτερον, καθώς είναι διαφορετική τάξη, πολλά αντικείμενα επαναλήψεων μπορούν να είναι ενεργά ταυτόχρονα.
Περαιτέρω ανάγνωση => C # Ερωτήσεις συνέντευξης
συμπέρασμα
Σχεδόν όλα τα κύρια θέματα κωδικοποίησης και προγραμματισμού της συνέντευξης C ++ καλύπτονται σε αυτό το άρθρο.
Ελπίζουμε ότι κάθε υποψήφιος θα αισθανθεί χαλαρός μετά την προετοιμασία για μια συνέντευξη χρησιμοποιώντας αυτήν τη σειρά ερωτήσεων συνέντευξης.
Όλα τα καλύτερα για τη συνέντευξή σας !!
Συνιστώμενη ανάγνωση
- Ερωτήσεις και απαντήσεις συνέντευξης
- Ερωτήσεις και απαντήσεις συνέντευξης δοκιμών ETL
- Μερικές δύσκολες μη αυτόματες ερωτήσεις και απαντήσεις
- 25 Καλύτερες Ερωτήσεις και Απαντήσεις Συνέντευξης για Ευέλικτη Δοκιμή
- Ερωτήσεις συνέντευξης Spock με απαντήσεις (πιο δημοφιλείς)
- Μερικές ενδιαφέρουσες ερωτήσεις συνέντευξης δοκιμών λογισμικού
- Κορυφαίες ερωτήσεις και απαντήσεις συνέντευξης 20+ .NET
- Κορυφαίες 32 καλύτερες ερωτήσεις και απαντήσεις συνέντευξης δεδομένων