User Tools

Site Tools


cpp:interfaces

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:interfaces [2019/05/10 07:21] gthanoscpp:interfaces [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 50: Line 50:
   capacity = cap;   capacity = cap;
   stackSize = 0;   stackSize = 0;
-  array = new (nothrow) int[capacity];+  array = new int[capacity];
 } }
  
Line 59: Line 59:
 void ArrayStack::push(int o) { void ArrayStack::push(int o) {
   if(stackSize==capacity) {   if(stackSize==capacity) {
-    int *_array = new (nothrow) int[2*capacity];+    int *_array = new int[2*capacity];
     for(int i=0; i<stackSize; i++)     for(int i=0; i<stackSize; i++)
       _array[i] = array[i];       _array[i] = array[i];
Line 140: Line 140:
  
 void LinkedStack::push(int o) { void LinkedStack::push(int o) {
-  LinkedNode *node = new (nothrow) LinkedNode(head, o);+  LinkedNode *node = new LinkedNode(head, o);
   head = node;   head = node;
   stackSize++;   stackSize++;
Line 192: Line 192:
 </code> </code>
  
-Ένα Makefile που μεταγλωττίζει τον παραπάνω κώδικα είναι το εξής:+Το Makefile που μεταγλωττίζει τον παραπάνω κώδικα είναι το εξής: 
 <code makefile Makefile> <code makefile Makefile>
  
Line 206: Line 207:
 clean: clean:
  rm *.o StackUsage  rm *.o StackUsage
- 
 </code> </code>
  
-Από τον παραπάνω κώδικα παρατηρούμε ότι η κλάση abstract κλάση //Stack// παρέχει μία σειρά από //virtual// μεθόδους οι οποίες υλοποιούνται στις //ArrayStack// και //LinkedStack//. Η μέθοδος //invertArray// χρησιμοποιεί την abstract κλάση //Stack// ως //interface//. Ανάλογα με το είδος του αντικειμένου τύπου //Stack// με το οποίο θα κληθεί ο παραπάνω κώδικας η εσωτερική υλοποίηση της στοίβας θα είναι διαφορετική. Ο κώδικας όμως που χρησιμοποιεί το //interface// της στοίβας παραμένει αμετάβλητος, ανεξάρτητα από την εσωτερική υλοποίηση.+Από τον παραπάνω κώδικα παρατηρούμε ότι η abstract κλάση //Stack// παρέχει μία σειρά από //virtual// μεθόδους οι οποίες υλοποιούνται από τις κλάσεις //ArrayStack// και //LinkedStack//. Η μέθοδος //invertArray// χρησιμοποιεί την abstract κλάση //Stack// ως //interface//. Ανάλογα με το είδος του αντικειμένου τύπου //Stack// με το οποίο θα κληθεί ο παραπάνω κώδικας η εσωτερική υλοποίηση της στοίβας θα είναι διαφορετική. Ο κώδικας όμως που χρησιμοποιεί το //interface// της στοίβας παραμένει αμετάβλητος, ανεξάρτητα από την εσωτερική υλοποίηση.
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
-Τα //interfaces// στη C++ υλοποιούνται αποκλειστικά μέσω abstract κλάσεων που περιέχουν //pure virtual// συναρτήσεις. Είναι προφανές ότι μία //abstract// κλάση εκτός από //pure virtual// συναρτήσεις μπορεί να περιέχει και //virtual// συναρτήσεις και κανονικές συναρτήσεις, αλλά και μεταβλητές (πεδία). Η παραπάνω παραδοχή "θολώνει" λίγο την έννοια του //interface// στη C++, καθώς επιτρέπει να υπάρχουν δεδομένα και default υλοποιήσεις σε ένα //interface//. Σε κάθε περίπτωση, εάν μία κλάση περιέχει μόνο //pure virtual// συναρτήσεις μπορείτε να θεωρήσετε ότι αντιπροσωπεύει ένα //interface//.+Τα //interfaces// στη C++ υλοποιούνται αποκλειστικά μέσω //abstract// κλάσεων που περιέχουν //pure virtual// συναρτήσεις. Είναι προφανές ότι μία //abstract// κλάση εκτός από //pure virtual// συναρτήσεις μπορεί να περιέχει και //virtual// συναρτήσεις και κανονικές συναρτήσεις, αλλά και μεταβλητές (πεδία). Η παραπάνω παραδοχή "θολώνει" λίγο την έννοια του //interface// στη C++, καθώς επιτρέπει να υπάρχουν δεδομένα και default υλοποιήσεις σε ένα //interface//. Σε κάθε περίπτωση, εάν μία κλάση περιέχει μόνο //pure virtual// συναρτήσεις μπορείτε να θεωρήσετε ότι αντιπροσωπεύει ένα //interface//.
 </WRAP> </WRAP>
  
cpp/interfaces.1557472893.txt.gz · Last modified: 2019/05/10 06:21 (external edit)