🗊Презентация Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων

Нажмите для полного просмотра!
Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №1Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №2Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №3Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №4Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №5Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №6Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №7Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №8Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №9Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №10Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №11Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №12Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №13Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №14Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №15Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №16Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №17Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №18Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №19Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №20Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №21Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №22Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №23Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №24Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №25Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №26Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №27Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №28Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №29Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №30Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №31Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №32Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №33Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №34Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №35Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №36Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №37Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №38Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №39Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №40Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №41Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №42Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №43Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №44Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №45Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №46Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №47Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №48Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №49Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №50Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №51Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №52Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №53Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №54Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №55Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №56Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №57Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №58Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №59Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №60Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №61Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №62Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №63Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №64Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №65Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №66Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №67Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №68Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №69Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №70Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №71Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №72Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №73Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №74Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №75Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №76Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №77Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №78

Содержание

Вы можете ознакомиться и скачать презентацию на тему Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων. Доклад-сообщение содержит 78 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Οντοκεντρικοσ προγραμματισμοσ ΙΙ (С++). Τάξεις και αφαίρεση δεδομένων, слайд №1
Описание слайда:

Слайд 2





Τάξεις Μέρος ΙΙ
Описание слайда:
Τάξεις Μέρος ΙΙ

Слайд 3





Εισαγωγή
Τάξεις
Αφαίρεση Δεδομένων
Αντικειμενοστραφής προγραμματισμός
Κληρονομικότητα και πολυμορφισμός
Описание слайда:
Εισαγωγή Τάξεις Αφαίρεση Δεδομένων Αντικειμενοστραφής προγραμματισμός Κληρονομικότητα και πολυμορφισμός

Слайд 4





7.2  const (Σταθερά) Αντικείμενα και Μέθοδοι
Η αρχή της ελάχιστης πρόσβασης
Επιτρέπουμε πρόσβαση για τροποποιήσεις μόνο στα απαραίτητα αντικείμενα
const
Ορίζει αντικείμενο που δε τροποποιείται
Δίνει Compiler error
Παράδειγμα
       const Time noon( 12, 0, 0 );  
Δηλώνει const αντικείμενο noon της Time 
Αρχικοποιεί σε 12
Описание слайда:
7.2 const (Σταθερά) Αντικείμενα και Μέθοδοι Η αρχή της ελάχιστης πρόσβασης Επιτρέπουμε πρόσβαση για τροποποιήσεις μόνο στα απαραίτητα αντικείμενα const Ορίζει αντικείμενο που δε τροποποιείται Δίνει Compiler error Παράδειγμα const Time noon( 12, 0, 0 ); Δηλώνει const αντικείμενο noon της Time Αρχικοποιεί σε 12

Слайд 5





7.2 const (Σταθερά) Αντικείμενα και Μέθοδοι
const μέθοδοι
Οι μέθοδοι αντικειμένων const πρέπει να είναι και αυτές const
Δε μπορεί να τροποποιούν αντικείμενα
Ορίζουμε ως const σε
Πρωτότυπο
Μετά τη λίστα παραμέτρων
Δηλώσεις 
Πριν την αρχή του αριστερού αγκίστρου
Описание слайда:
7.2 const (Σταθερά) Αντικείμενα και Μέθοδοι const μέθοδοι Οι μέθοδοι αντικειμένων const πρέπει να είναι και αυτές const Δε μπορεί να τροποποιούν αντικείμενα Ορίζουμε ως const σε Πρωτότυπο Μετά τη λίστα παραμέτρων Δηλώσεις Πριν την αρχή του αριστερού αγκίστρου

Слайд 6





time5.h (1 of 2)


1      // Fig. 7.1: time5.h
2      // Definition of class Time.
3      // Member functions defined in time5.cpp.
4      #ifndef TIME5_H
5      #define TIME5_H
6      
7      class Time {
8      
9      public:
10       Time( int = 0, int = 0, int = 0 );  // default constructor
11    
12       // set functions
13       void setTime( int, int, int );  // set time
14       void setHour( int );            // set hour
15       void setMinute( int );          // set minute
16       void setSecond( int );          // set second
17    
18       // get functions (normally declared const)      
19       int getHour() const;            // return hour  
20       int getMinute() const;          // return minute
21       int getSecond() const;          // return second
22    
23       // print functions (normally declared const)           
24       void printUniversal() const;    // print universal time
25       void printStandard();           // print standard time
Описание слайда:
time5.h (1 of 2) 1 // Fig. 7.1: time5.h 2 // Definition of class Time. 3 // Member functions defined in time5.cpp. 4 #ifndef TIME5_H 5 #define TIME5_H 6 7 class Time { 8 9 public: 10 Time( int = 0, int = 0, int = 0 ); // default constructor 11 12 // set functions 13 void setTime( int, int, int ); // set time 14 void setHour( int ); // set hour 15 void setMinute( int ); // set minute 16 void setSecond( int ); // set second 17 18 // get functions (normally declared const) 19 int getHour() const; // return hour 20 int getMinute() const; // return minute 21 int getSecond() const; // return second 22 23 // print functions (normally declared const) 24 void printUniversal() const; // print universal time 25 void printStandard(); // print standard time

Слайд 7





time5.h (2 of 2)


26    
27    private:
28       int hour;    // 0 - 23 (24-hour clock format)
29       int minute;  // 0 - 59
30       int second;  // 0 - 59
31    
32    }; // end class Time
33    
34    #endif
Описание слайда:
time5.h (2 of 2) 26 27 private: 28 int hour; // 0 - 23 (24-hour clock format) 29 int minute; // 0 - 59 30 int second; // 0 - 59 31 32 }; // end class Time 33 34 #endif

Слайд 8





time5.cpp (1 of 4)


1      // Fig. 7.2: time5.cpp
2      // Member-function definitions for class Time.
3      #include <iostream>
4      
5      using std::cout;
6      
7      #include <iomanip>
8      
9      using std::setfill;
10    using std::setw;
11    
12    // include definition of class Time from time5.h
13    #include "time5.h"
14    
15    // constructor function to initialize private data;
16    // calls member function setTime to set variables;
17    // default values are 0 (see class definition)
18    Time::Time( int hour, int minute, int second ) 
19    { 
20       setTime( hour, minute, second ); 
21    
22    } // end Time constructor
23
Описание слайда:
time5.cpp (1 of 4) 1 // Fig. 7.2: time5.cpp 2 // Member-function definitions for class Time. 3 #include <iostream> 4 5 using std::cout; 6 7 #include <iomanip> 8 9 using std::setfill; 10 using std::setw; 11 12 // include definition of class Time from time5.h 13 #include "time5.h" 14 15 // constructor function to initialize private data; 16 // calls member function setTime to set variables; 17 // default values are 0 (see class definition) 18 Time::Time( int hour, int minute, int second ) 19 { 20 setTime( hour, minute, second ); 21 22 } // end Time constructor 23

Слайд 9





time5.cpp (2 of 4)


24    // set hour, minute and second values
25    void Time::setTime( int hour, int minute, int second )
26    {
27       setHour( hour );
28       setMinute( minute );
29       setSecond( second );
30    
31    } // end function setTime
32    
33    // set hour value
34    void Time::setHour( int h ) 
35    {
36       hour = ( h >= 0 && h < 24 ) ? h : 0; 
37    
38    } // end function setHour
39    
40    // set minute value
41    void Time::setMinute( int m )
42    { 
43       minute = ( m >= 0 && m < 60 ) ? m : 0; 
44    
45    } // end function setMinute
46
Описание слайда:
time5.cpp (2 of 4) 24 // set hour, minute and second values 25 void Time::setTime( int hour, int minute, int second ) 26 { 27 setHour( hour ); 28 setMinute( minute ); 29 setSecond( second ); 30 31 } // end function setTime 32 33 // set hour value 34 void Time::setHour( int h ) 35 { 36 hour = ( h >= 0 && h < 24 ) ? h : 0; 37 38 } // end function setHour 39 40 // set minute value 41 void Time::setMinute( int m ) 42 { 43 minute = ( m >= 0 && m < 60 ) ? m : 0; 44 45 } // end function setMinute 46

Слайд 10





time5.cpp (3 of 4)


47    // set second value
48    void Time::setSecond( int s )
49    { 
50       second = ( s >= 0 && s < 60 ) ? s : 0; 
51    
52    } // end function setSecond
53    
54    // return hour value
55    int Time::getHour() const
56    { 
57       return hour; 
58    
59    } // end function getHour
60    
61    // return minute value
62    int Time::getMinute() const
63    {
64       return minute; 
65    
66    } // end function getMinute
67
Описание слайда:
time5.cpp (3 of 4) 47 // set second value 48 void Time::setSecond( int s ) 49 { 50 second = ( s >= 0 && s < 60 ) ? s : 0; 51 52 } // end function setSecond 53 54 // return hour value 55 int Time::getHour() const 56 { 57 return hour; 58 59 } // end function getHour 60 61 // return minute value 62 int Time::getMinute() const 63 { 64 return minute; 65 66 } // end function getMinute 67

Слайд 11





time5.cpp (4 of 4)


68    // return second value
69    int Time::getSecond() const
70    { 
71       return second;
72       
73    } // end function getSecond
74    
75    // print Time in universal format
76    void Time::printUniversal() const
77    {
78       cout << setfill( '0' ) << setw( 2 ) << hour << ":"
79            << setw( 2 ) << minute << ":"
80            << setw( 2 ) << second;
81    
82    } // end function printUniversal
83    
84    // print Time in standard format
85    void Time::printStandard() // note lack of const declaration
86    {
87       cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
88            << ":" << setfill( '0' ) << setw( 2 ) << minute
89            << ":" << setw( 2 ) << second 
90            << ( hour < 12 ? " AM" : " PM" );
91    
92    } // end function printStandard
Описание слайда:
time5.cpp (4 of 4) 68 // return second value 69 int Time::getSecond() const 70 { 71 return second; 72 73 } // end function getSecond 74 75 // print Time in universal format 76 void Time::printUniversal() const 77 { 78 cout << setfill( '0' ) << setw( 2 ) << hour << ":" 79 << setw( 2 ) << minute << ":" 80 << setw( 2 ) << second; 81 82 } // end function printUniversal 83 84 // print Time in standard format 85 void Time::printStandard() // note lack of const declaration 86 { 87 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) 88 << ":" << setfill( '0' ) << setw( 2 ) << minute 89 << ":" << setw( 2 ) << second 90 << ( hour < 12 ? " AM" : " PM" ); 91 92 } // end function printStandard

Слайд 12





fig07_03.cpp
(1 of 2)


1      // Fig. 7.3: fig07_03.cpp
2      // Attempting to access a const object with
3      // non-const member functions.
4      
5      // include Time class definition from time5.h
6      #include "time5.h"
7      
8      int main()
9      {
10       Time wakeUp( 6, 45, 0 );       // non-constant object
11       const Time noon( 12, 0, 0 );   // constant object
12
Описание слайда:
fig07_03.cpp (1 of 2) 1 // Fig. 7.3: fig07_03.cpp 2 // Attempting to access a const object with 3 // non-const member functions. 4 5 // include Time class definition from time5.h 6 #include "time5.h" 7 8 int main() 9 { 10 Time wakeUp( 6, 45, 0 ); // non-constant object 11 const Time noon( 12, 0, 0 ); // constant object 12

Слайд 13





fig07_03.cpp
(2 of 2)

fig07_03.cpp
output (1 of 1)


13                              // OBJECT      MEMBER FUNCTION
14       wakeUp.setHour( 18 );  // non-const   non-const
15    
16       noon.setHour( 12 );    // const       non-const
17    
18       wakeUp.getHour();      // non-const   const
19    
20       noon.getMinute();      // const       const
21       noon.printUniversal(); // const       const
22    
23       noon.printStandard();  // const       non-const
24    
25       return 0;
26    
27    } // end main
Описание слайда:
fig07_03.cpp (2 of 2) fig07_03.cpp output (1 of 1) 13 // OBJECT MEMBER FUNCTION 14 wakeUp.setHour( 18 ); // non-const non-const 15 16 noon.setHour( 12 ); // const non-const 17 18 wakeUp.getHour(); // non-const const 19 20 noon.getMinute(); // const const 21 noon.printUniversal(); // const const 22 23 noon.printStandard(); // const non-const 24 25 return 0; 26 27 } // end main

Слайд 14





7.2 const (Σταθερά) Αντικείμενα και Μέθοδοι
Αρχικοποίηση αντικειμένου
Αρχικοποίηση με  member initializer syntax
Μπορεί να χρησιμοποιηθεί
Με όλα τα μέλη δεδομένων
Πρέπει να χρησιμοποιηθεί
Για τα μέλη const
Για όλες τις αναφορές μεταβλητών
Описание слайда:
7.2 const (Σταθερά) Αντικείμενα και Μέθοδοι Αρχικοποίηση αντικειμένου Αρχικοποίηση με member initializer syntax Μπορεί να χρησιμοποιηθεί Με όλα τα μέλη δεδομένων Πρέπει να χρησιμοποιηθεί Για τα μέλη const Για όλες τις αναφορές μεταβλητών

Слайд 15





fig07_04.cpp
(1 of 3)


1      // Fig. 7.4: fig07_04.cpp
2      // Using a member initializer to initialize a
3      // constant of a built-in data type.
4      #include <iostream>
5      
6      using std::cout;
7      using std::endl;
8      
9      class Increment {
10    
11    public:
12       Increment( int c = 0, int i = 1 );  // default constructor
13    
14       void addIncrement() 
15       { 
16          count += increment; 
17    
18       } // end function addIncrement
19    
20       void print() const;     // prints count and increment
21
Описание слайда:
fig07_04.cpp (1 of 3) 1 // Fig. 7.4: fig07_04.cpp 2 // Using a member initializer to initialize a 3 // constant of a built-in data type. 4 #include <iostream> 5 6 using std::cout; 7 using std::endl; 8 9 class Increment { 10 11 public: 12 Increment( int c = 0, int i = 1 ); // default constructor 13 14 void addIncrement() 15 { 16 count += increment; 17 18 } // end function addIncrement 19 20 void print() const; // prints count and increment 21

Слайд 16





fig07_04.cpp
(2 of 3)


22    private:
23       int count;
24       const int increment;    // const data member
25    
26    }; // end class Increment
27    
28    // constructor 
29    Increment::Increment( int c, int i )
30       : count( c ),     // initializer for non-const member     
31         increment( i )  // required initializer for const member
32    { 
33       // empty body
34    
35    } // end Increment constructor
36    
37    // print count and increment values
38    void Increment::print() const
39    {
40       cout << "count = " << count
41            << ", increment = " << increment << endl;
42    
43    } // end function print
44
Описание слайда:
fig07_04.cpp (2 of 3) 22 private: 23 int count; 24 const int increment; // const data member 25 26 }; // end class Increment 27 28 // constructor 29 Increment::Increment( int c, int i ) 30 : count( c ), // initializer for non-const member 31 increment( i ) // required initializer for const member 32 { 33 // empty body 34 35 } // end Increment constructor 36 37 // print count and increment values 38 void Increment::print() const 39 { 40 cout << "count = " << count 41 << ", increment = " << increment << endl; 42 43 } // end function print 44

Слайд 17





fig07_04.cpp
(3 of 3)

fig07_04.cpp
output (1 of 1)


45    int main()
46    {
47       Increment value( 10, 5 );
48    
49       cout << "Before incrementing: ";
50       value.print();
51    
52       for ( int j = 0; j < 3; j++ ) {
53          value.addIncrement();
54          cout << "After increment " << j + 1 << ": ";
55          value.print();
56       }
57    
58       return 0;
59    
60    } // end main
Описание слайда:
fig07_04.cpp (3 of 3) fig07_04.cpp output (1 of 1) 45 int main() 46 { 47 Increment value( 10, 5 ); 48 49 cout << "Before incrementing: "; 50 value.print(); 51 52 for ( int j = 0; j < 3; j++ ) { 53 value.addIncrement(); 54 cout << "After increment " << j + 1 << ": "; 55 value.print(); 56 } 57 58 return 0; 59 60 } // end main

Слайд 18





fig07_05.cpp
(1 of 3)


1      // Fig. 7.5: fig07_05.cpp
2      // Attempting to initialize a constant of
3      // a built-in data type with an assignment.
4      #include <iostream>
5      
6      using std::cout;
7      using std::endl;
8      
9      class Increment {
10    
11    public:
12       Increment( int c = 0, int i = 1 );  // default constructor
13    
14       void addIncrement() 
15       { 
16          count += increment; 
17    
18       } // end function addIncrement
19    
20       void print() const;     // prints count and increment
21
Описание слайда:
fig07_05.cpp (1 of 3) 1 // Fig. 7.5: fig07_05.cpp 2 // Attempting to initialize a constant of 3 // a built-in data type with an assignment. 4 #include <iostream> 5 6 using std::cout; 7 using std::endl; 8 9 class Increment { 10 11 public: 12 Increment( int c = 0, int i = 1 ); // default constructor 13 14 void addIncrement() 15 { 16 count += increment; 17 18 } // end function addIncrement 19 20 void print() const; // prints count and increment 21

Слайд 19





fig07_05.cpp
(2 of 3)


22    private:
23       int count;
24       const int increment;    // const data member
25    
26    }; // end class Increment
27    
28    // constructor                                                 
29    Increment::Increment( int c, int i )                           
30    {             // Constant member 'increment' is not initialized
31       count = c;      // allowed because count is not constant    
32       increment = i;  // ERROR: Cannot modify a const object      
33                                                                   
34    } // end Increment constructor                                 
35    
36    // print count and increment values
37    void Increment::print() const
38    {
39       cout << "count = " << count
40            << ", increment = " << increment << endl;
41    
42    } // end function print
43
Описание слайда:
fig07_05.cpp (2 of 3) 22 private: 23 int count; 24 const int increment; // const data member 25 26 }; // end class Increment 27 28 // constructor 29 Increment::Increment( int c, int i ) 30 { // Constant member 'increment' is not initialized 31 count = c; // allowed because count is not constant 32 increment = i; // ERROR: Cannot modify a const object 33 34 } // end Increment constructor 35 36 // print count and increment values 37 void Increment::print() const 38 { 39 cout << "count = " << count 40 << ", increment = " << increment << endl; 41 42 } // end function print 43

Слайд 20





fig07_05.cpp
(3 of 3)

fig07_05.cpp
output (1 of 1)


44    int main()
45    {
46       Increment value( 10, 5 );
47    
48       cout << "Before incrementing: ";
49       value.print();
50    
51       for ( int j = 0; j < 3; j++ ) {
52          value.addIncrement();
53          cout << "After increment " << j + 1 << ": ";
54          value.print();
55       }
56    
57       return 0;
58    
59    } // end main
Описание слайда:
fig07_05.cpp (3 of 3) fig07_05.cpp output (1 of 1) 44 int main() 45 { 46 Increment value( 10, 5 ); 47 48 cout << "Before incrementing: "; 49 value.print(); 50 51 for ( int j = 0; j < 3; j++ ) { 52 value.addIncrement(); 53 cout << "After increment " << j + 1 << ": "; 54 value.print(); 55 } 56 57 return 0; 58 59 } // end main

Слайд 21





7.3	Σύνθεση/ Composition: Αντικείμενα ως μέλη τάξης
Σύνθεση/ Composition  
Μία τάξη έχει αντικείμενα άλλης τάξης ως μέλη
Κατασκευή αντικειμένων
Τα μέλη αντικείμενα δημιουργούνται με τη σειρά που δηλώνονται
Δεν ακολουθείται η σειρά του constructor
Δημιουργούνται πριν από τα αντικείμενα της τάξης που τα χρησιμοποιεί
Описание слайда:
7.3 Σύνθεση/ Composition: Αντικείμενα ως μέλη τάξης Σύνθεση/ Composition Μία τάξη έχει αντικείμενα άλλης τάξης ως μέλη Κατασκευή αντικειμένων Τα μέλη αντικείμενα δημιουργούνται με τη σειρά που δηλώνονται Δεν ακολουθείται η σειρά του constructor Δημιουργούνται πριν από τα αντικείμενα της τάξης που τα χρησιμοποιεί

Слайд 22





date1.h  (1 of 1)


1      // Fig. 7.6: date1.h 
2      // Date class definition.
3      // Member functions defined in date1.cpp
4      #ifndef DATE1_H
5      #define DATE1_H
6      
7      class Date {
8      
9      public:
10       Date( int = 1, int = 1, int = 1900 ); // default constructor
11       void print() const;  // print date in month/day/year format
12       ~Date();  // provided to confirm destruction order
13    
14    private:
15       int month;  // 1-12 (January-December)
16       int day;    // 1-31 based on month
17       int year;   // any year
18    
19       // utility function to test proper day for month and year
20       int checkDay( int ) const;
21    
22    }; // end class Date
23    
24    #endif
Описание слайда:
date1.h (1 of 1) 1 // Fig. 7.6: date1.h 2 // Date class definition. 3 // Member functions defined in date1.cpp 4 #ifndef DATE1_H 5 #define DATE1_H 6 7 class Date { 8 9 public: 10 Date( int = 1, int = 1, int = 1900 ); // default constructor 11 void print() const; // print date in month/day/year format 12 ~Date(); // provided to confirm destruction order 13 14 private: 15 int month; // 1-12 (January-December) 16 int day; // 1-31 based on month 17 int year; // any year 18 19 // utility function to test proper day for month and year 20 int checkDay( int ) const; 21 22 }; // end class Date 23 24 #endif

Слайд 23





date1.cpp (1 of 3)


1      // Fig. 7.7: date1.cpp
2      // Member-function definitions for class Date.
3      #include <iostream>
4      
5      using std::cout;
6      using std::endl;
7      
8      // include Date class definition from date1.h
9      #include "date1.h"
10    
11    // constructor confirms proper value for month; calls
12    // utility function checkDay to confirm proper value for day
13    Date::Date( int mn, int dy, int yr )
14    {
15       if ( mn > 0 && mn <= 12 )  // validate the month
16          month = mn;
17    
18       else {                     // invalid month set to 1
19          month = 1;
20          cout << "Month " << mn << " invalid. Set to month 1.\n";
21       }
22    
23       year = yr;                 // should validate yr
24       day = checkDay( dy );      // validate the day
25
Описание слайда:
date1.cpp (1 of 3) 1 // Fig. 7.7: date1.cpp 2 // Member-function definitions for class Date. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 // include Date class definition from date1.h 9 #include "date1.h" 10 11 // constructor confirms proper value for month; calls 12 // utility function checkDay to confirm proper value for day 13 Date::Date( int mn, int dy, int yr ) 14 { 15 if ( mn > 0 && mn <= 12 ) // validate the month 16 month = mn; 17 18 else { // invalid month set to 1 19 month = 1; 20 cout << "Month " << mn << " invalid. Set to month 1.\n"; 21 } 22 23 year = yr; // should validate yr 24 day = checkDay( dy ); // validate the day 25

Слайд 24





date1.cpp (2 of 3)


26       // output Date object to show when its constructor is called
27       cout << "Date object constructor for date ";                
28       print();                                                    
29       cout << endl;                                               
30    
31    } // end Date constructor
32    
33    // print Date object in form month/day/year
34    void Date::print() const
35    {
36       cout << month << '/' << day << '/' << year; 
37    
38    } // end function print
39    
40    // output Date object to show when its destructor is called
41    Date::~Date()                                              
42    {                                                          
43       cout << "Date object destructor for date ";             
44       print();                                                
45       cout << endl;                                           
46                                                               
47    } // end destructor ~Date                                  
48
Описание слайда:
date1.cpp (2 of 3) 26 // output Date object to show when its constructor is called 27 cout << "Date object constructor for date "; 28 print(); 29 cout << endl; 30 31 } // end Date constructor 32 33 // print Date object in form month/day/year 34 void Date::print() const 35 { 36 cout << month << '/' << day << '/' << year; 37 38 } // end function print 39 40 // output Date object to show when its destructor is called 41 Date::~Date() 42 { 43 cout << "Date object destructor for date "; 44 print(); 45 cout << endl; 46 47 } // end destructor ~Date 48

Слайд 25





date1.cpp (3 of 3)


49    // utility function to confirm proper day value based on 
50    // month and year; handles leap years, too
51    int Date::checkDay( int testDay ) const
52    {
53       static const int daysPerMonth[ 13 ] = 
54          { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
55    
56       // determine whether testDay is valid for specified month
57       if ( testDay > 0 && testDay <= daysPerMonth[ month ] )
58          return testDay;
59    
60       // February 29 check for leap year 
61       if ( month == 2 && testDay == 29 &&
62          ( year % 400 == 0 ||                      
63             ( year % 4 == 0 && year % 100 != 0 ) ) )
64          return testDay;
65    
66       cout << "Day " << testDay << " invalid. Set to day 1.\n";
67    
68       return 1;  // leave object in consistent state if bad value
69    
70    } // end function checkDay
Описание слайда:
date1.cpp (3 of 3) 49 // utility function to confirm proper day value based on 50 // month and year; handles leap years, too 51 int Date::checkDay( int testDay ) const 52 { 53 static const int daysPerMonth[ 13 ] = 54 { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 55 56 // determine whether testDay is valid for specified month 57 if ( testDay > 0 && testDay <= daysPerMonth[ month ] ) 58 return testDay; 59 60 // February 29 check for leap year 61 if ( month == 2 && testDay == 29 && 62 ( year % 400 == 0 || 63 ( year % 4 == 0 && year % 100 != 0 ) ) ) 64 return testDay; 65 66 cout << "Day " << testDay << " invalid. Set to day 1.\n"; 67 68 return 1; // leave object in consistent state if bad value 69 70 } // end function checkDay

Слайд 26





employee1.h (1 of 2)


1      // Fig. 7.8: employee1.h
2      // Employee class definition.
3      // Member functions defined in employee1.cpp.
4      #ifndef EMPLOYEE1_H
5      #define EMPLOYEE1_H
6      
7      // include Date class definition from date1.h
8      #include "date1.h"
9      
10    class Employee {
11    
12    public:
13       Employee(                                                   
14          const char *, const char *, const Date &, const Date & );
15    
16       void print() const;
17       ~Employee();  // provided to confirm destruction order
18    
19    private:
20       char firstName[ 25 ];
21       char lastName[ 25 ];
22       const Date birthDate;  // composition: member object
23       const Date hireDate;   // composition: member object
24    
25    }; // end class Employee
Описание слайда:
employee1.h (1 of 2) 1 // Fig. 7.8: employee1.h 2 // Employee class definition. 3 // Member functions defined in employee1.cpp. 4 #ifndef EMPLOYEE1_H 5 #define EMPLOYEE1_H 6 7 // include Date class definition from date1.h 8 #include "date1.h" 9 10 class Employee { 11 12 public: 13 Employee( 14 const char *, const char *, const Date &, const Date & ); 15 16 void print() const; 17 ~Employee(); // provided to confirm destruction order 18 19 private: 20 char firstName[ 25 ]; 21 char lastName[ 25 ]; 22 const Date birthDate; // composition: member object 23 const Date hireDate; // composition: member object 24 25 }; // end class Employee

Слайд 27





employee1.h (2 of 2)

employee1.cpp
(1 of 3)


26    
27    #endif
Описание слайда:
employee1.h (2 of 2) employee1.cpp (1 of 3) 26 27 #endif

Слайд 28





employee1.cpp
(2 of 3)


13    // constructor uses member initializer list to pass initializer
14    // values to constructors of member objects birthDate and      
15    // hireDate [Note: This invokes the so-called "default copy    
16    // constructor" which the C++ compiler provides implicitly.]   
17    Employee::Employee( const char *first, const char *last,       
18       const Date &dateOfBirth, const Date &dateOfHire )           
19       : birthDate( dateOfBirth ),  // initialize birthDate        
20         hireDate( dateOfHire )     // initialize hireDate         
21    {
22       // copy first into firstName and be sure that it fits
23       int length = strlen( first );
24       length = ( length < 25 ? length : 24 );
25       strncpy( firstName, first, length );
26       firstName[ length ] = '\0';
27    
28       // copy last into lastName and be sure that it fits
29       length = strlen( last );
30       length = ( length < 25 ? length : 24 );
31       strncpy( lastName, last, length );
32       lastName[ length ] = '\0';
33    
34       // output Employee object to show when constructor is called
35       cout << "Employee object constructor: "                     
36            << firstName << ' ' << lastName << endl;               
37
Описание слайда:
employee1.cpp (2 of 3) 13 // constructor uses member initializer list to pass initializer 14 // values to constructors of member objects birthDate and 15 // hireDate [Note: This invokes the so-called "default copy 16 // constructor" which the C++ compiler provides implicitly.] 17 Employee::Employee( const char *first, const char *last, 18 const Date &dateOfBirth, const Date &dateOfHire ) 19 : birthDate( dateOfBirth ), // initialize birthDate 20 hireDate( dateOfHire ) // initialize hireDate 21 { 22 // copy first into firstName and be sure that it fits 23 int length = strlen( first ); 24 length = ( length < 25 ? length : 24 ); 25 strncpy( firstName, first, length ); 26 firstName[ length ] = '\0'; 27 28 // copy last into lastName and be sure that it fits 29 length = strlen( last ); 30 length = ( length < 25 ? length : 24 ); 31 strncpy( lastName, last, length ); 32 lastName[ length ] = '\0'; 33 34 // output Employee object to show when constructor is called 35 cout << "Employee object constructor: " 36 << firstName << ' ' << lastName << endl; 37

Слайд 29





employee1.cpp
(3 of 3)


38    } // end Employee constructor
39    
40    // print Employee object
41    void Employee::print() const
42    {
43       cout << lastName << ", " << firstName << "\nHired: ";
44       hireDate.print();
45       cout << "  Birth date: ";
46       birthDate.print();
47       cout << endl;
48    
49    } // end function print
50    
51    // output Employee object to show when its destructor is called
52    Employee::~Employee()                                          
53    {                                                              
54       cout << "Employee object destructor: "                      
55            << lastName << ", " << firstName << endl;              
56                                                                   
57    } // end destructor ~Employee
Описание слайда:
employee1.cpp (3 of 3) 38 } // end Employee constructor 39 40 // print Employee object 41 void Employee::print() const 42 { 43 cout << lastName << ", " << firstName << "\nHired: "; 44 hireDate.print(); 45 cout << " Birth date: "; 46 birthDate.print(); 47 cout << endl; 48 49 } // end function print 50 51 // output Employee object to show when its destructor is called 52 Employee::~Employee() 53 { 54 cout << "Employee object destructor: " 55 << lastName << ", " << firstName << endl; 56 57 } // end destructor ~Employee

Слайд 30





fig07_10.cpp
(1 of 1)


1      // Fig. 7.10: fig07_10.cpp
2      // Demonstrating composition--an object with member objects.
3      #include <iostream>
4      
5      using std::cout;
6      using std::endl;
7      
8      #include "employee1.h"  // Employee class definition
9      
10    int main()
11    {
12       Date birth( 7, 24, 1949 );                      
13       Date hire( 3, 12, 1988 );                       
14       Employee manager( "Bob", "Jones", birth, hire );
15    
16       cout << '\n';
17       manager.print();
18    
19       cout << "\nTest Date constructor with invalid values:\n";
20       Date lastDayOff( 14, 35, 1994 );  // invalid month and day
21       cout << endl;
22    
23       return 0;
24    
25    } // end main
Описание слайда:
fig07_10.cpp (1 of 1) 1 // Fig. 7.10: fig07_10.cpp 2 // Demonstrating composition--an object with member objects. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 #include "employee1.h" // Employee class definition 9 10 int main() 11 { 12 Date birth( 7, 24, 1949 ); 13 Date hire( 3, 12, 1988 ); 14 Employee manager( "Bob", "Jones", birth, hire ); 15 16 cout << '\n'; 17 manager.print(); 18 19 cout << "\nTest Date constructor with invalid values:\n"; 20 Date lastDayOff( 14, 35, 1994 ); // invalid month and day 21 cout << endl; 22 23 return 0; 24 25 } // end main

Слайд 31





fig07_10.cpp
output (1 of 1)


Date object constructor for date 7/24/1949
Date object constructor for date 3/12/1988
Employee object constructor: Bob Jones
  
Jones, Bob
Hired: 3/12/1988  Birth date: 7/24/1949
  
Test Date constructor with invalid values:
Month 14 invalid. Set to month 1.
Day 35 invalid. Set to day 1.
Date object constructor for date 1/1/1994
  
Date object destructor for date 1/1/1994
Employee object destructor: Jones, Bob
Date object destructor for date 3/12/1988
Date object destructor for date 7/24/1949
Date object destructor for date 3/12/1988
Date object destructor for date 7/24/1949
Описание слайда:
fig07_10.cpp output (1 of 1) Date object constructor for date 7/24/1949 Date object constructor for date 3/12/1988 Employee object constructor: Bob Jones Jones, Bob Hired: 3/12/1988 Birth date: 7/24/1949 Test Date constructor with invalid values: Month 14 invalid. Set to month 1. Day 35 invalid. Set to day 1. Date object constructor for date 1/1/1994 Date object destructor for date 1/1/1994 Employee object destructor: Jones, Bob Date object destructor for date 3/12/1988 Date object destructor for date 7/24/1949 Date object destructor for date 3/12/1988 Date object destructor for date 7/24/1949

Слайд 32





7.4 friend Συναρτήσεις και  friend Τάξεις
friend συναρτήσεις
Ορίζονται εκτός εμβέλειας της τάξης
Έχουν πρόσβαση σε non-public members
Δήλωση friends
Συνάρτηση
Προηγείται το keyword friend
Όλες οι συναρτήσεις της τάξης classTwo ως friends της τάξης classOne
Βάζουμε τη δήλωση της μορφής
friend class classTwo;
	στον ορισμό της classOne
Описание слайда:
7.4 friend Συναρτήσεις και friend Τάξεις friend συναρτήσεις Ορίζονται εκτός εμβέλειας της τάξης Έχουν πρόσβαση σε non-public members Δήλωση friends Συνάρτηση Προηγείται το keyword friend Όλες οι συναρτήσεις της τάξης classTwo ως friends της τάξης classOne Βάζουμε τη δήλωση της μορφής friend class classTwo; στον ορισμό της classOne

Слайд 33





7.4 friend Συναρτήσεις και and friend Τάξεις
Ιδιότητες
Μπορεί να δοθεί όχι να ανακληθεί
τάξη B friend της τάξης A
Η τάξη A πρέπει να δηλώσει την τάξη B ως friend
Όχι συμμετρική
τάξη B friend της τάξης A
τάξη A όχι απαραίτητα friend της τάξης B 
Όχι μεταβατική 
τάξη A friend της B 
τάξη B friend της C
τάξη A όχι απαραίτητα friend της C
Описание слайда:
7.4 friend Συναρτήσεις και and friend Τάξεις Ιδιότητες Μπορεί να δοθεί όχι να ανακληθεί τάξη B friend της τάξης A Η τάξη A πρέπει να δηλώσει την τάξη B ως friend Όχι συμμετρική τάξη B friend της τάξης A τάξη A όχι απαραίτητα friend της τάξης B Όχι μεταβατική τάξη A friend της B τάξη B friend της C τάξη A όχι απαραίτητα friend της C

Слайд 34





fig07_11.cpp
(1 of 3)


1      // Fig. 7.11: fig07_11.cpp  
2      // Friends can access private members of a class.
3      #include <iostream>
4         
5      using std::cout;
6      using std::endl;
7      
8      // Count class definition
9      class Count {
10       friend void setX( Count &, int ); // friend declaration
11    
12    public:
13      
14       // constructor
15       Count()
16          : x( 0 )  // initialize x to 0
17       { 
18          // empty body
19       
20       } // end Count constructor
21
Описание слайда:
fig07_11.cpp (1 of 3) 1 // Fig. 7.11: fig07_11.cpp 2 // Friends can access private members of a class. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 // Count class definition 9 class Count { 10 friend void setX( Count &, int ); // friend declaration 11 12 public: 13 14 // constructor 15 Count() 16 : x( 0 ) // initialize x to 0 17 { 18 // empty body 19 20 } // end Count constructor 21

Слайд 35





fig07_11.cpp
(2 of 3)


22       // output x 
23       void print() const       
24       { 
25          cout << x << endl; 
26    
27       } // end function print
28    
29    private:
30       int x;  // data member
31    
32    }; // end class Count
33    
34    // function setX can modify private data of Count 
35    // because setX is declared as a friend of Count  
36    void setX( Count &c, int val )                    
37    {                                                 
38       c.x = val;  // legal: setX is a friend of Count
39                                                      
40    } // end function setX                            
41
Описание слайда:
fig07_11.cpp (2 of 3) 22 // output x 23 void print() const 24 { 25 cout << x << endl; 26 27 } // end function print 28 29 private: 30 int x; // data member 31 32 }; // end class Count 33 34 // function setX can modify private data of Count 35 // because setX is declared as a friend of Count 36 void setX( Count &c, int val ) 37 { 38 c.x = val; // legal: setX is a friend of Count 39 40 } // end function setX 41

Слайд 36





fig07_11.cpp
(3 of 3)

fig07_11.cpp  
output (1 of 1)


42    int main()
43    {
44       Count counter;       // create Count object
45    
46       cout << "counter.x after instantiation: ";
47       counter.print();
48    
49       setX( counter, 8 );  // set x with a friend
50    
51       cout << "counter.x after call to setX friend function: ";
52       counter.print();
53    
54       return 0;
55    
56    } // end main
Описание слайда:
fig07_11.cpp (3 of 3) fig07_11.cpp output (1 of 1) 42 int main() 43 { 44 Count counter; // create Count object 45 46 cout << "counter.x after instantiation: "; 47 counter.print(); 48 49 setX( counter, 8 ); // set x with a friend 50 51 cout << "counter.x after call to setX friend function: "; 52 counter.print(); 53 54 return 0; 55 56 } // end main

Слайд 37





fig07_12.cpp 
(1 of 3)


1      // Fig. 7.12: fig07_12.cpp 
2      // Non-friend/non-member functions cannot access
3      // private data of a class.
4      #include <iostream>
5      
6      using std::cout;
7      using std::endl;
8      
9      // Count class definition
10    // (note that there is no friendship declaration)
11    class Count {
12    
13    public:
14      
15       // constructor
16       Count()
17          : x( 0 )  // initialize x to 0
18       { 
19          // empty body
20       
21       } // end Count constructor
22
Описание слайда:
fig07_12.cpp (1 of 3) 1 // Fig. 7.12: fig07_12.cpp 2 // Non-friend/non-member functions cannot access 3 // private data of a class. 4 #include <iostream> 5 6 using std::cout; 7 using std::endl; 8 9 // Count class definition 10 // (note that there is no friendship declaration) 11 class Count { 12 13 public: 14 15 // constructor 16 Count() 17 : x( 0 ) // initialize x to 0 18 { 19 // empty body 20 21 } // end Count constructor 22

Слайд 38





fig07_12.cpp 
(2 of 3)


23       // output x 
24       void print() const       
25       { 
26          cout << x << endl; 
27    
28       } // end function print
29    
30    private:
31       int x;  // data member
32    
33    }; // end class Count
34    
35    // function tries to modify private data of Count,            
36    // but cannot because function is not a friend of Count       
37    void cannotSetX( Count &c, int val )                          
38    {                                                             
39       c.x = val;  // ERROR: cannot access private member in Count
40                                                                  
41    } // end function cannotSetX                                  
42
Описание слайда:
fig07_12.cpp (2 of 3) 23 // output x 24 void print() const 25 { 26 cout << x << endl; 27 28 } // end function print 29 30 private: 31 int x; // data member 32 33 }; // end class Count 34 35 // function tries to modify private data of Count, 36 // but cannot because function is not a friend of Count 37 void cannotSetX( Count &c, int val ) 38 { 39 c.x = val; // ERROR: cannot access private member in Count 40 41 } // end function cannotSetX 42

Слайд 39





fig07_12.cpp 
(3 of 3)

fig07_12.cpp 
output (1 of 1)


43    int main()
44    {
45       Count counter;            // create Count object
46    
47       cannotSetX( counter, 3 ); // cannotSetX is not a friend
48    
49       return 0;
50    
51    } // end main
Описание слайда:
fig07_12.cpp (3 of 3) fig07_12.cpp output (1 of 1) 43 int main() 44 { 45 Count counter; // create Count object 46 47 cannotSetX( counter, 3 ); // cannotSetX is not a friend 48 49 return 0; 50 51 } // end main

Слайд 40





7.5	Χρήση του this
this
Επιτρέπει στο αντικείμενο να έχει πρόσβαση στη δική του διεύθυνση
Ο τύπος του δείκτη this εξαρτάται από:
Τύπο του αντικειμένου
Αν η συνάρτηση έιναι const
Για τις non-const συναρτήσεις Employee
this έχει τύπο Employee * const 
Constant δείκτη σε non-const Employee αντικείμενο
Για τις const συναρτήσεις Employee
this έχει τύπο const Employee * const 
Constant δείκτη σε constant Employee αντικείμενο
Описание слайда:
7.5 Χρήση του this this Επιτρέπει στο αντικείμενο να έχει πρόσβαση στη δική του διεύθυνση Ο τύπος του δείκτη this εξαρτάται από: Τύπο του αντικειμένου Αν η συνάρτηση έιναι const Για τις non-const συναρτήσεις Employee this έχει τύπο Employee * const Constant δείκτη σε non-const Employee αντικείμενο Για τις const συναρτήσεις Employee this έχει τύπο const Employee * const Constant δείκτη σε constant Employee αντικείμενο

Слайд 41





fig07_13.cpp  
(1 of 3)


1      // Fig. 7.13: fig07_13.cpp  
2      // Using the this pointer to refer to object members.
3      #include <iostream>
4      
5      using std::cout;
6      using std::endl;
7      
8      class Test {
9      
10    public:
11       Test( int = 0 );    // default constructor
12       void print() const;
13    
14    private:
15       int x;
16    
17    }; // end class Test
18    
19    // constructor
20    Test::Test( int value ) 
21       : x( value )  // initialize x to value
22    { 
23       // empty body 
24       
25    } // end Test constructor
Описание слайда:
fig07_13.cpp (1 of 3) 1 // Fig. 7.13: fig07_13.cpp 2 // Using the this pointer to refer to object members. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 class Test { 9 10 public: 11 Test( int = 0 ); // default constructor 12 void print() const; 13 14 private: 15 int x; 16 17 }; // end class Test 18 19 // constructor 20 Test::Test( int value ) 21 : x( value ) // initialize x to value 22 { 23 // empty body 24 25 } // end Test constructor

Слайд 42





fig07_13.cpp  
(2 of 3)


26    
27    // print x using implicit and explicit this pointers;
28    // parentheses around *this required
29    void Test::print() const   
30    {
31       // implicitly use this pointer to access member x
32       cout << "        x = " << x;                     
33    
34       // explicitly use this pointer to access member x
35       cout << "\n  this->x = " << this->x;             
36      
37       // explicitly use dereferenced this pointer and 
38       // the dot operator to access member x          
39       cout << "\n(*this).x = " << ( *this ).x << endl;
40    
41    } // end function print
42    
43    int main()
44    {
45       Test testObject( 12 );
46    
47       testObject.print();
48    
49       return 0;
50
Описание слайда:
fig07_13.cpp (2 of 3) 26 27 // print x using implicit and explicit this pointers; 28 // parentheses around *this required 29 void Test::print() const 30 { 31 // implicitly use this pointer to access member x 32 cout << " x = " << x; 33 34 // explicitly use this pointer to access member x 35 cout << "\n this->x = " << this->x; 36 37 // explicitly use dereferenced this pointer and 38 // the dot operator to access member x 39 cout << "\n(*this).x = " << ( *this ).x << endl; 40 41 } // end function print 42 43 int main() 44 { 45 Test testObject( 12 ); 46 47 testObject.print(); 48 49 return 0; 50

Слайд 43





fig07_13.cpp  
(3 of 3)

fig07_13.cpp  
output (1 of 1)


51    } // end main
Описание слайда:
fig07_13.cpp (3 of 3) fig07_13.cpp output (1 of 1) 51 } // end main

Слайд 44





7.5	Χρήση του this
Σειριακή κλήση συναρτήσεων
Πολλαπλές συναρτήσεις καλούνται με μία δήλωση
Η συνάρτηση επιστρέφει δείκτη αναφοράς στο ίδιο το αντικείμενο
{ return *this; } 
Οι συναρτήσεις που δεν επιστρέφουν αναφορές πρέπει να κληθούν τελευταίες
Описание слайда:
7.5 Χρήση του this Σειριακή κλήση συναρτήσεων Πολλαπλές συναρτήσεις καλούνται με μία δήλωση Η συνάρτηση επιστρέφει δείκτη αναφοράς στο ίδιο το αντικείμενο { return *this; } Οι συναρτήσεις που δεν επιστρέφουν αναφορές πρέπει να κληθούν τελευταίες

Слайд 45





time6.h (1 of 2)


1      // Fig. 7.14: time6.h
2      // Cascading member function calls.
3      
4      // Time class definition.
5      // Member functions defined in time6.cpp.
6      #ifndef TIME6_H
7      #define TIME6_H
8      
9      class Time {
10    
11    public:
12       Time( int = 0, int = 0, int = 0 );  // default constructor
13    
14       // set functions                                           
15       Time &setTime( int, int, int ); // set hour, minute, second
16       Time &setHour( int );    // set hour                       
17       Time &setMinute( int );  // set minute                     
18       Time &setSecond( int );  // set second                     
19    
20       // get functions (normally declared const)
21       int getHour() const;     // return hour
22       int getMinute() const;   // return minute
23       int getSecond() const;   // return second
24
Описание слайда:
time6.h (1 of 2) 1 // Fig. 7.14: time6.h 2 // Cascading member function calls. 3 4 // Time class definition. 5 // Member functions defined in time6.cpp. 6 #ifndef TIME6_H 7 #define TIME6_H 8 9 class Time { 10 11 public: 12 Time( int = 0, int = 0, int = 0 ); // default constructor 13 14 // set functions 15 Time &setTime( int, int, int ); // set hour, minute, second 16 Time &setHour( int ); // set hour 17 Time &setMinute( int ); // set minute 18 Time &setSecond( int ); // set second 19 20 // get functions (normally declared const) 21 int getHour() const; // return hour 22 int getMinute() const; // return minute 23 int getSecond() const; // return second 24

Слайд 46





time6.h (2 of 2)


25       // print functions (normally declared const)
26       void printUniversal() const;  // print universal time
27       void printStandard() const;   // print standard time
28    
29    private:
30       int hour;    // 0 - 23 (24-hour clock format)
31       int minute;  // 0 - 59
32       int second;  // 0 - 59
33    
34    }; // end class Time
35    
36    #endif
Описание слайда:
time6.h (2 of 2) 25 // print functions (normally declared const) 26 void printUniversal() const; // print universal time 27 void printStandard() const; // print standard time 28 29 private: 30 int hour; // 0 - 23 (24-hour clock format) 31 int minute; // 0 - 59 32 int second; // 0 - 59 33 34 }; // end class Time 35 36 #endif

Слайд 47





time6.cpp (1 of 5)


1      // Fig. 7.15: time6.cpp 
2      // Member-function definitions for Time class.
3      #include <iostream>
4      
5      using std::cout;
6      
7      #include <iomanip>
8      
9      using std::setfill;
10    using std::setw;
11    
12    #include "time6.h"  // Time class definition
13    
14    // constructor function to initialize private data;
15    // calls member function setTime to set variables;
16    // default values are 0 (see class definition)
17    Time::Time( int hr, int min, int sec ) 
18    { 
19       setTime( hr, min, sec ); 
20    
21    } // end Time constructor
22
Описание слайда:
time6.cpp (1 of 5) 1 // Fig. 7.15: time6.cpp 2 // Member-function definitions for Time class. 3 #include <iostream> 4 5 using std::cout; 6 7 #include <iomanip> 8 9 using std::setfill; 10 using std::setw; 11 12 #include "time6.h" // Time class definition 13 14 // constructor function to initialize private data; 15 // calls member function setTime to set variables; 16 // default values are 0 (see class definition) 17 Time::Time( int hr, int min, int sec ) 18 { 19 setTime( hr, min, sec ); 20 21 } // end Time constructor 22

Слайд 48





time6.cpp (2 of 5)


23    // set values of hour, minute, and second
24    Time &Time::setTime( int h, int m, int s )
25    {
26       setHour( h );
27       setMinute( m );
28       setSecond( s ); 
29    
30       return *this;   // enables cascading
31    
32    } // end function setTime
33    
34    // set hour value
35    Time &Time::setHour( int h )
36    {
37       hour = ( h >= 0 && h < 24 ) ? h : 0;
38    
39       return *this;   // enables cascading
40    
41    } // end function setHour
42
Описание слайда:
time6.cpp (2 of 5) 23 // set values of hour, minute, and second 24 Time &Time::setTime( int h, int m, int s ) 25 { 26 setHour( h ); 27 setMinute( m ); 28 setSecond( s ); 29 30 return *this; // enables cascading 31 32 } // end function setTime 33 34 // set hour value 35 Time &Time::setHour( int h ) 36 { 37 hour = ( h >= 0 && h < 24 ) ? h : 0; 38 39 return *this; // enables cascading 40 41 } // end function setHour 42

Слайд 49





time6.cpp (3 of 5)


43    // set minute value
44    Time &Time::setMinute( int m )
45    {
46       minute = ( m >= 0 && m < 60 ) ? m : 0;
47    
48       return *this;   // enables cascading
49    
50    } // end function setMinute
51    
52    // set second value
53    Time &Time::setSecond( int s )
54    {
55       second = ( s >= 0 && s < 60 ) ? s : 0;
56    
57       return *this;   // enables cascading
58    
59    } // end function setSecond
60    
61    // get hour value
62    int Time::getHour() const 
63    { 
64       return hour; 
65    
66    } // end function getHour
67
Описание слайда:
time6.cpp (3 of 5) 43 // set minute value 44 Time &Time::setMinute( int m ) 45 { 46 minute = ( m >= 0 && m < 60 ) ? m : 0; 47 48 return *this; // enables cascading 49 50 } // end function setMinute 51 52 // set second value 53 Time &Time::setSecond( int s ) 54 { 55 second = ( s >= 0 && s < 60 ) ? s : 0; 56 57 return *this; // enables cascading 58 59 } // end function setSecond 60 61 // get hour value 62 int Time::getHour() const 63 { 64 return hour; 65 66 } // end function getHour 67

Слайд 50





time6.cpp (4 of 5)


68    // get minute value
69    int Time::getMinute() const 
70    { 
71       return minute; 
72    
73    } // end function getMinute
74    
75    // get second value
76    int Time::getSecond() const 
77    { 
78       return second; 
79    
80    } // end function getSecond
81    
82    // print Time in universal format 
83    void Time::printUniversal() const
84    {
85       cout << setfill( '0' ) << setw( 2 ) << hour << ":"
86            << setw( 2 ) << minute << ":"
87            << setw( 2 ) << second;
88    
89    } // end function printUniversal
90
Описание слайда:
time6.cpp (4 of 5) 68 // get minute value 69 int Time::getMinute() const 70 { 71 return minute; 72 73 } // end function getMinute 74 75 // get second value 76 int Time::getSecond() const 77 { 78 return second; 79 80 } // end function getSecond 81 82 // print Time in universal format 83 void Time::printUniversal() const 84 { 85 cout << setfill( '0' ) << setw( 2 ) << hour << ":" 86 << setw( 2 ) << minute << ":" 87 << setw( 2 ) << second; 88 89 } // end function printUniversal 90

Слайд 51





time6.cpp (5 of 5)


91    // print Time in standard format
92    void Time::printStandard() const
93    {
94       cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
95            << ":" << setfill( '0' ) << setw( 2 ) << minute
96            << ":" << setw( 2 ) << second 
97            << ( hour < 12 ? " AM" : " PM" );
98    
99    } // end function printStandard
Описание слайда:
time6.cpp (5 of 5) 91 // print Time in standard format 92 void Time::printStandard() const 93 { 94 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) 95 << ":" << setfill( '0' ) << setw( 2 ) << minute 96 << ":" << setw( 2 ) << second 97 << ( hour < 12 ? " AM" : " PM" ); 98 99 } // end function printStandard

Слайд 52





fig07_16.cpp
(1 of 2)


1      // Fig. 7.16: fig07_16.cpp
2      // Cascading member function calls with the this pointer.
3      #include <iostream>
4      
5      using std::cout;
6      using std::endl;
7      
8      #include "time6.h"  // Time class definition
9      
10    int main()
11    {
12       Time t;
13    
14       // cascaded function calls                      
15       t.setHour( 18 ).setMinute( 30 ).setSecond( 22 );
16    
17       // output time in universal and standard formats
18       cout << "Universal time: ";
19       t.printUniversal();
20    
21       cout << "\nStandard time: ";
22       t.printStandard();
23    
24       cout << "\n\nNew standard time: ";
25
Описание слайда:
fig07_16.cpp (1 of 2) 1 // Fig. 7.16: fig07_16.cpp 2 // Cascading member function calls with the this pointer. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 #include "time6.h" // Time class definition 9 10 int main() 11 { 12 Time t; 13 14 // cascaded function calls 15 t.setHour( 18 ).setMinute( 30 ).setSecond( 22 ); 16 17 // output time in universal and standard formats 18 cout << "Universal time: "; 19 t.printUniversal(); 20 21 cout << "\nStandard time: "; 22 t.printStandard(); 23 24 cout << "\n\nNew standard time: "; 25

Слайд 53





fig07_16.cpp
(2 of 2)

fig07_16.cpp
output (1 of 1)


26       // cascaded function calls              
27       t.setTime( 20, 20, 20 ).printStandard();
28    
29       cout << endl;
30    
31       return 0;
32    
33    } // end main
Описание слайда:
fig07_16.cpp (2 of 2) fig07_16.cpp output (1 of 1) 26 // cascaded function calls 27 t.setTime( 20, 20, 20 ).printStandard(); 28 29 cout << endl; 30 31 return 0; 32 33 } // end main

Слайд 54





7.6  Διαχείριση Δυναμικής Μνήμης με χρήση new και delete
Διαχείριση δυναμικής μνήμης
Ελέγχει τη διανομή μνήμης
Με χρήση των τελεστών new και delete
include standard header <new>
Описание слайда:
7.6 Διαχείριση Δυναμικής Μνήμης με χρήση new και delete Διαχείριση δυναμικής μνήμης Ελέγχει τη διανομή μνήμης Με χρήση των τελεστών new και delete include standard header <new>

Слайд 55





7.6  Διαχείριση Δυναμικής Μνήμης με χρήση new και delete
Έστω
Time *timePtr;
timePtr = new Time;
Τελεστής new
Δημιουργεί αντικείμενα κατάλληλου μεγέθους για τον τύπο Time
Δίνει λάθος αν δεν υπάρχει χώρος στη μνήμη
Επιστρέφει δείκτη στον συγκεκριμένο τύπο
Με αρχικοποίηση
double *ptr = new double( 3.14159 );
Time *timePtr = new Time( 12, 0, 0 );
Δήλωση πίνακα
int *gradesArray = new int[ 10 ];
Описание слайда:
7.6 Διαχείριση Δυναμικής Μνήμης με χρήση new και delete Έστω Time *timePtr; timePtr = new Time; Τελεστής new Δημιουργεί αντικείμενα κατάλληλου μεγέθους για τον τύπο Time Δίνει λάθος αν δεν υπάρχει χώρος στη μνήμη Επιστρέφει δείκτη στον συγκεκριμένο τύπο Με αρχικοποίηση double *ptr = new double( 3.14159 ); Time *timePtr = new Time( 12, 0, 0 ); Δήλωση πίνακα int *gradesArray = new int[ 10 ];

Слайд 56





7.6  Διαχείριση Δυναμικής Μνήμης με χρήση new και delete
Απελευθερώνει τη μνήμη και καταστρέφει τα αντικείμενα
Έστω
delete timePtr;
Τελεστής delete
Καλεί το destructor
Η μνήμη μπορεί να χρησιμοποιηθεί με άλλα αντικείμενα
Deallocating arrays
delete [] gradesArray;
Απελευθερώνει το array στο οποίο δείχνει το gradesArray
Αν είναι δείκτης σε array αντικειμένων
Καλείται πρώτα ο destructor για κάθε αντικείμενο του array
Μετά απελευθερώνει τη μνήμη
Описание слайда:
7.6 Διαχείριση Δυναμικής Μνήμης με χρήση new και delete Απελευθερώνει τη μνήμη και καταστρέφει τα αντικείμενα Έστω delete timePtr; Τελεστής delete Καλεί το destructor Η μνήμη μπορεί να χρησιμοποιηθεί με άλλα αντικείμενα Deallocating arrays delete [] gradesArray; Απελευθερώνει το array στο οποίο δείχνει το gradesArray Αν είναι δείκτης σε array αντικειμένων Καλείται πρώτα ο destructor για κάθε αντικείμενο του array Μετά απελευθερώνει τη μνήμη

Слайд 57





7.7	static τάξεις
static τάξης μεταβλητή
Δεδομένα διαθέσιμα σε όλη την τάξη
Ιδιότητα της τάξης, όχι συγκεκριμένου αντικειμένου της τάξης
Αποδοτικό όταν απλά ένα αντίγραφο της τάξης είναι αρκετό
Μόνο η μεταβλητή static πρέπει να ενημερώνεται
Μπορεί να μοιάζει με global, αλλά έχει εμβέλεια στην τάξη
Αρχικοποιείται μια μόνο φορά
Υπάρχει ακόμη και χωρίς αντικείμενο
Описание слайда:
7.7 static τάξεις static τάξης μεταβλητή Δεδομένα διαθέσιμα σε όλη την τάξη Ιδιότητα της τάξης, όχι συγκεκριμένου αντικειμένου της τάξης Αποδοτικό όταν απλά ένα αντίγραφο της τάξης είναι αρκετό Μόνο η μεταβλητή static πρέπει να ενημερώνεται Μπορεί να μοιάζει με global, αλλά έχει εμβέλεια στην τάξη Αρχικοποιείται μια μόνο φορά Υπάρχει ακόμη και χωρίς αντικείμενο

Слайд 58





7.7	static τάξεις
Πρόσβαση σε μεταβλητές τάξης static
Προσβάσιμα μέσω οποιουδήποτε αντικειμένου τάξης
public static μεταβλητές
Μπορούν να προσπελαστούν και μέσω (::)
  Employee::count
private static μεταβλητές
Όταν δεν υπάρχει αντικείμενο
Μπορεί να τα προσπελάσει κανείς μέσω συνάρτησης public static
Описание слайда:
7.7 static τάξεις Πρόσβαση σε μεταβλητές τάξης static Προσβάσιμα μέσω οποιουδήποτε αντικειμένου τάξης public static μεταβλητές Μπορούν να προσπελαστούν και μέσω (::) Employee::count private static μεταβλητές Όταν δεν υπάρχει αντικείμενο Μπορεί να τα προσπελάσει κανείς μέσω συνάρτησης public static

Слайд 59





7.7	static τάξεις
static συναρτήσεις
Δε μπορούν να προσπελάσουν non-static δεδομένα ή συναρτήσεις
Δεν υπάρχει this για τις static συναρτήσεις
static δεδομένα και συναρτήσεις υπάρχουν ανεξάρτητα από τα αντικείμενα
Описание слайда:
7.7 static τάξεις static συναρτήσεις Δε μπορούν να προσπελάσουν non-static δεδομένα ή συναρτήσεις Δεν υπάρχει this για τις static συναρτήσεις static δεδομένα και συναρτήσεις υπάρχουν ανεξάρτητα από τα αντικείμενα

Слайд 60





employee2.h (1 of 2)


1      // Fig. 7.17: employee2.h
2      // Employee class definition.
3      #ifndef EMPLOYEE2_H
4      #define EMPLOYEE2_H
5      
6      class Employee {
7      
8      public:
9         Employee( const char *, const char * );  // constructor
10       ~Employee();                       // destructor
11       const char *getFirstName() const;  // return first name
12       const char *getLastName() const;   // return last name
13    
14       // static member function                               
15       static int getCount();  // return # objects instantiated
16    
17    private:
18       char *firstName;
19       char *lastName;
20    
21       // static data member                               
22       static int count;  // number of objects instantiated
23    
24    }; // end class Employee
25
Описание слайда:
employee2.h (1 of 2) 1 // Fig. 7.17: employee2.h 2 // Employee class definition. 3 #ifndef EMPLOYEE2_H 4 #define EMPLOYEE2_H 5 6 class Employee { 7 8 public: 9 Employee( const char *, const char * ); // constructor 10 ~Employee(); // destructor 11 const char *getFirstName() const; // return first name 12 const char *getLastName() const; // return last name 13 14 // static member function 15 static int getCount(); // return # objects instantiated 16 17 private: 18 char *firstName; 19 char *lastName; 20 21 // static data member 22 static int count; // number of objects instantiated 23 24 }; // end class Employee 25

Слайд 61





employee2.h (2 of 2)

employee2.cpp
(1 of 3)


26    #endif
Описание слайда:
employee2.h (2 of 2) employee2.cpp (1 of 3) 26 #endif

Слайд 62





employee2.cpp
(2 of 3)


23    
24    // constructor dynamically allocates space for           
25    // first and last name and uses strcpy to copy           
26    // first and last names into the object                  
27    Employee::Employee( const char *first, const char *last )
28    {                                                        
29       firstName = new char[ strlen( first ) + 1 ];
30       strcpy( firstName, first );
31    
32       lastName = new char[ strlen( last ) + 1 ];  
33       strcpy( lastName, last );
34    
35       ++count;  // increment static count of employees
36    
37       cout << "Employee constructor for " << firstName
38            << ' ' << lastName << " called." << endl;
39    
40    } // end Employee constructor
41    
42    // destructor deallocates dynamically allocated memory
43    Employee::~Employee()
44    {
45       cout << "~Employee() called for " << firstName
46            << ' ' << lastName << endl;
47
Описание слайда:
employee2.cpp (2 of 3) 23 24 // constructor dynamically allocates space for 25 // first and last name and uses strcpy to copy 26 // first and last names into the object 27 Employee::Employee( const char *first, const char *last ) 28 { 29 firstName = new char[ strlen( first ) + 1 ]; 30 strcpy( firstName, first ); 31 32 lastName = new char[ strlen( last ) + 1 ]; 33 strcpy( lastName, last ); 34 35 ++count; // increment static count of employees 36 37 cout << "Employee constructor for " << firstName 38 << ' ' << lastName << " called." << endl; 39 40 } // end Employee constructor 41 42 // destructor deallocates dynamically allocated memory 43 Employee::~Employee() 44 { 45 cout << "~Employee() called for " << firstName 46 << ' ' << lastName << endl; 47

Слайд 63





employee2.cpp
(3 of 3)


48       delete [] firstName;  // recapture memory
49       delete [] lastName;   // recapture memory
50    
51       --count;  // decrement static count of employees
52    
53    } // end destructor ~Employee
54    
55    // return first name of employee
56    const char *Employee::getFirstName() const
57    {
58       // const before return type prevents client from modifying
59       // private data; client should copy returned string before
60       // destructor deletes storage to prevent undefined pointer
61       return firstName;
62    
63    } // end function getFirstName
64    
65    // return last name of employee
66    const char *Employee::getLastName() const
67    {
68       // const before return type prevents client from modifying
69       // private data; client should copy returned string before
70       // destructor deletes storage to prevent undefined pointer
71       return lastName;
72    
73    } // end function getLastName
Описание слайда:
employee2.cpp (3 of 3) 48 delete [] firstName; // recapture memory 49 delete [] lastName; // recapture memory 50 51 --count; // decrement static count of employees 52 53 } // end destructor ~Employee 54 55 // return first name of employee 56 const char *Employee::getFirstName() const 57 { 58 // const before return type prevents client from modifying 59 // private data; client should copy returned string before 60 // destructor deletes storage to prevent undefined pointer 61 return firstName; 62 63 } // end function getFirstName 64 65 // return last name of employee 66 const char *Employee::getLastName() const 67 { 68 // const before return type prevents client from modifying 69 // private data; client should copy returned string before 70 // destructor deletes storage to prevent undefined pointer 71 return lastName; 72 73 } // end function getLastName

Слайд 64





fig07_19.cpp
(1 of 2)


1      // Fig. 7.19: fig07_19.cpp
2      // Driver to test class Employee.
3      #include <iostream>
4      
5      using std::cout;
6      using std::endl;
7      
8      #include <new>          // C++ standard new operator
9      
10    #include "employee2.h"  // Employee class definition
11    
12    int main()
13    {
14       cout << "Number of employees before instantiation is "
15            << Employee::getCount() << endl;   // use class name
16    
17       Employee *e1Ptr = new Employee( "Susan", "Baker" ); 
18       Employee *e2Ptr = new Employee( "Robert", "Jones" );
19    
20       cout << "Number of employees after instantiation is "
21            << e1Ptr->getCount();
22
Описание слайда:
fig07_19.cpp (1 of 2) 1 // Fig. 7.19: fig07_19.cpp 2 // Driver to test class Employee. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 #include <new> // C++ standard new operator 9 10 #include "employee2.h" // Employee class definition 11 12 int main() 13 { 14 cout << "Number of employees before instantiation is " 15 << Employee::getCount() << endl; // use class name 16 17 Employee *e1Ptr = new Employee( "Susan", "Baker" ); 18 Employee *e2Ptr = new Employee( "Robert", "Jones" ); 19 20 cout << "Number of employees after instantiation is " 21 << e1Ptr->getCount(); 22

Слайд 65





fig07_19.cpp
(2 of 2)


23       cout << "\n\nEmployee 1: "
24            << e1Ptr->getFirstName()
25            << " " << e1Ptr->getLastName()
26            << "\nEmployee 2: "
27            << e2Ptr->getFirstName()
28            << " " << e2Ptr->getLastName() << "\n\n";
29    
30       delete e1Ptr;  // recapture memory                        
31       e1Ptr = 0;     // disconnect pointer from free-store space
32       delete e2Ptr;  // recapture memory                        
33       e2Ptr = 0;     // disconnect pointer from free-store space
34    
35       cout << "Number of employees after deletion is "
36            << Employee::getCount() << endl;
37    
38       return 0;
39    
40    } // end main
Описание слайда:
fig07_19.cpp (2 of 2) 23 cout << "\n\nEmployee 1: " 24 << e1Ptr->getFirstName() 25 << " " << e1Ptr->getLastName() 26 << "\nEmployee 2: " 27 << e2Ptr->getFirstName() 28 << " " << e2Ptr->getLastName() << "\n\n"; 29 30 delete e1Ptr; // recapture memory 31 e1Ptr = 0; // disconnect pointer from free-store space 32 delete e2Ptr; // recapture memory 33 e2Ptr = 0; // disconnect pointer from free-store space 34 35 cout << "Number of employees after deletion is " 36 << Employee::getCount() << endl; 37 38 return 0; 39 40 } // end main

Слайд 66





fig07_19.cpp
output (1 of 1)


Number of employees before instantiation is 0
Employee constructor for Susan Baker called.
Employee constructor for Robert Jones called.
Number of employees after instantiation is 2
 
Employee 1: Susan Baker
Employee 2: Robert Jones
 
~Employee() called for Susan Baker
~Employee() called for Robert Jones
Number of employees after deletion is 0
Описание слайда:
fig07_19.cpp output (1 of 1) Number of employees before instantiation is 0 Employee constructor for Susan Baker called. Employee constructor for Robert Jones called. Number of employees after instantiation is 2   Employee 1: Susan Baker Employee 2: Robert Jones   ~Employee() called for Susan Baker ~Employee() called for Robert Jones Number of employees after deletion is 0

Слайд 67





7.8	Αφαίρεση Δεδομένων και Απόκρυψη Πληροφορίας
Απόκρυψη πληροφορίας
Οι τάξεις κρύβουν λεπτομέρειες της υλοποίησης από τους πελάτες
Π.χ. : δομή δεδομένων στοίβας
Δεδομένα προστίθενται (pushed)
Δεδομένα αφαιρούνται (popped)
Δομή Last-in, first-out (LIFO)
Ο πελάτης θέλει μόνο μια LIFO δομή δεδομένων
Δε τον ενδιαφέρει πως υλοποιείται η στοίβα
Αφαίρεση δεδομένων
Περιγράφει τη λειτουργικότητα της τάξης ανεξάρτητα από την υλοποίηση
Описание слайда:
7.8 Αφαίρεση Δεδομένων και Απόκρυψη Πληροφορίας Απόκρυψη πληροφορίας Οι τάξεις κρύβουν λεπτομέρειες της υλοποίησης από τους πελάτες Π.χ. : δομή δεδομένων στοίβας Δεδομένα προστίθενται (pushed) Δεδομένα αφαιρούνται (popped) Δομή Last-in, first-out (LIFO) Ο πελάτης θέλει μόνο μια LIFO δομή δεδομένων Δε τον ενδιαφέρει πως υλοποιείται η στοίβα Αφαίρεση δεδομένων Περιγράφει τη λειτουργικότητα της τάξης ανεξάρτητα από την υλοποίηση

Слайд 68





7.8	Αφαίρεση Δεδομένων και Απόκρυψη Πληροφορίας
Abstract data types (ADTs)
Προσεγγίσεις/ μοντέλα πραγματικών εννοιών και συμπεριφοράς
int, float είναι μοντέλα για αριθμούς
Αναπαράσταση δεδομένων
C++ επεκτάσεις
Οι Standard τύποι δεδομένων δε μπορούν να τροποποιηθούν αλλά μπορούν να δημιουργηθούν νέοι
Описание слайда:
7.8 Αφαίρεση Δεδομένων και Απόκρυψη Πληροφορίας Abstract data types (ADTs) Προσεγγίσεις/ μοντέλα πραγματικών εννοιών και συμπεριφοράς int, float είναι μοντέλα για αριθμούς Αναπαράσταση δεδομένων C++ επεκτάσεις Οι Standard τύποι δεδομένων δε μπορούν να τροποποιηθούν αλλά μπορούν να δημιουργηθούν νέοι

Слайд 69





7.8.1 	Παράδειγμα: Πίνακας
Abstract Data Type
ADT πίνακας
Μπορεί να περιλαμβάνει
Έλεγχο πεδίου τιμών του δείκτη
Κάθε δυνατό πεδίο τιμών
Αντί να αρχίζει πάντα από το 0
Ανάθεση
Σύγκριση
Εισαγωγή και Εκτύπωση
Πίνακες που γνωρίζουν το μέγεθός τους
Πίνακες που επεκτείνονται δυναμικά
Описание слайда:
7.8.1 Παράδειγμα: Πίνακας Abstract Data Type ADT πίνακας Μπορεί να περιλαμβάνει Έλεγχο πεδίου τιμών του δείκτη Κάθε δυνατό πεδίο τιμών Αντί να αρχίζει πάντα από το 0 Ανάθεση Σύγκριση Εισαγωγή και Εκτύπωση Πίνακες που γνωρίζουν το μέγεθός τους Πίνακες που επεκτείνονται δυναμικά

Слайд 70





7.8.2	Παράδειγμα: String Abstract Data Type
Συμβολοσειρές στη C++
Η C++ δεν έχει τύπο string
Παρέχει μηχανισμό για δημιουργία και υλοποίηση string abstract data type
ANSI/ISO standard string
Описание слайда:
7.8.2 Παράδειγμα: String Abstract Data Type Συμβολοσειρές στη C++ Η C++ δεν έχει τύπο string Παρέχει μηχανισμό για δημιουργία και υλοποίηση string abstract data type ANSI/ISO standard string

Слайд 71





7.9	Εμπεριέχουσες τάξεις και Επαναλήπτες
Container classes (collection classes)
Έχουν σχεδιαστεί να έχουν συλλογές από αντικείμενα
Κοινές υπηρεσίες
Εισαγωγή, διαγραφή, αναζήτηση, ταξινόμηση
Παραδείγματα
Πίνακες, στοίβες, ουρές, δένδρα, διασυνδεδεμένες λίστες
Επαναλήπτες (iterators)
Επιστρέφουν το επόμενο στοιχείο μιας συλλογής
Ή ενεργούν πάνω στο επόμενο στοιχείο
Μπορεί να υπάρχουν πολλοί επαναλήπτες
Ως ένα βιβλίο με πολλούς σελιδοδείκτες
Κάθε επαναλήπτης έχει τη δική του «θέση»
Описание слайда:
7.9 Εμπεριέχουσες τάξεις και Επαναλήπτες Container classes (collection classes) Έχουν σχεδιαστεί να έχουν συλλογές από αντικείμενα Κοινές υπηρεσίες Εισαγωγή, διαγραφή, αναζήτηση, ταξινόμηση Παραδείγματα Πίνακες, στοίβες, ουρές, δένδρα, διασυνδεδεμένες λίστες Επαναλήπτες (iterators) Επιστρέφουν το επόμενο στοιχείο μιας συλλογής Ή ενεργούν πάνω στο επόμενο στοιχείο Μπορεί να υπάρχουν πολλοί επαναλήπτες Ως ένα βιβλίο με πολλούς σελιδοδείκτες Κάθε επαναλήπτης έχει τη δική του «θέση»

Слайд 72





7.10	Τάξεις Proxy
Proxy class
Κρύβουν την υλοποίηση μιας άλλης τάξης
Γνωρίζει μόνο τα public interface της τάξης που κρύβει
Forward class δήλωση
Χρησιμοποιείται όταν η δήλωση της τάξης χρησιμοποιεί δείκτη σε άλλη τάξη
Δεν απαιτείται header file
Δηλώνει την τάξη πριν την αναφορά
Μορφή:
class classToLoad;
Описание слайда:
7.10 Τάξεις Proxy Proxy class Κρύβουν την υλοποίηση μιας άλλης τάξης Γνωρίζει μόνο τα public interface της τάξης που κρύβει Forward class δήλωση Χρησιμοποιείται όταν η δήλωση της τάξης χρησιμοποιεί δείκτη σε άλλη τάξη Δεν απαιτείται header file Δηλώνει την τάξη πριν την αναφορά Μορφή: class classToLoad;

Слайд 73





implementation.h
(1 of 2)


1      // Fig. 7.20: implementation.h
2      // Header file for class Implementation
3      
4      class Implementation {
5      
6      public:
7      
8         // constructor
9         Implementation( int v )  
10          : value( v )  // initialize value with v
11       { 
12          // empty body
13    
14       } // end Implementation constructor
15    
16       // set value to v     
17       void setValue( int v )
18       { 
19          value = v;  // should validate v
20    
21       } // end function setValue
22
Описание слайда:
implementation.h (1 of 2) 1 // Fig. 7.20: implementation.h 2 // Header file for class Implementation 3 4 class Implementation { 5 6 public: 7 8 // constructor 9 Implementation( int v ) 10 : value( v ) // initialize value with v 11 { 12 // empty body 13 14 } // end Implementation constructor 15 16 // set value to v 17 void setValue( int v ) 18 { 19 value = v; // should validate v 20 21 } // end function setValue 22

Слайд 74





implementation.h
(2 of 2)


23       // return value     
24       int getValue() const
25       { 
26          return value; 
27    
28       } // end function getValue
29    
30    private:
31       int value;
32    
33    }; // end class Implementation
Описание слайда:
implementation.h (2 of 2) 23 // return value 24 int getValue() const 25 { 26 return value; 27 28 } // end function getValue 29 30 private: 31 int value; 32 33 }; // end class Implementation

Слайд 75





interface.h (1 of 1)


1      // Fig. 7.21: interface.h
2      // Header file for interface.cpp
3      
4      class Implementation;     // forward class declaration
5      
6      class Interface {
7      
8      public:
9         Interface( int );
10       void setValue( int );  // same public interface as
11       int getValue() const;  // class Implementation    
12       ~Interface();
13    
14    private:
15    
16       // requires previous forward declaration (line 4)
17       Implementation *ptr;                             
18    
19    }; // end class Interface
Описание слайда:
interface.h (1 of 1) 1 // Fig. 7.21: interface.h 2 // Header file for interface.cpp 3 4 class Implementation; // forward class declaration 5 6 class Interface { 7 8 public: 9 Interface( int ); 10 void setValue( int ); // same public interface as 11 int getValue() const; // class Implementation 12 ~Interface(); 13 14 private: 15 16 // requires previous forward declaration (line 4) 17 Implementation *ptr; 18 19 }; // end class Interface

Слайд 76





interface.cpp
(1 of 2)


1      // Fig. 7.22: interface.cpp
2      // Definition of class Interface
3      #include "interface.h"       // Interface class definition
4      #include "implementation.h"  // Implementation class definition
5      
6      // constructor
7      Interface::Interface( int v ) 
8         : ptr ( new Implementation( v ) )  // initialize ptr
9      { 
10       // empty body
11    
12    } // end Interface constructor
13    
14    // call Implementation's setValue function
15    void Interface::setValue( int v ) 
16    { 
17       ptr->setValue( v ); 
18    
19    } // end function setValue
20
Описание слайда:
interface.cpp (1 of 2) 1 // Fig. 7.22: interface.cpp 2 // Definition of class Interface 3 #include "interface.h" // Interface class definition 4 #include "implementation.h" // Implementation class definition 5 6 // constructor 7 Interface::Interface( int v ) 8 : ptr ( new Implementation( v ) ) // initialize ptr 9 { 10 // empty body 11 12 } // end Interface constructor 13 14 // call Implementation's setValue function 15 void Interface::setValue( int v ) 16 { 17 ptr->setValue( v ); 18 19 } // end function setValue 20

Слайд 77





interface.cpp
(2 of 2)


21    // call Implementation's getValue function
22    int Interface::getValue() const 
23    { 
24       return ptr->getValue(); 
25    
26    } // end function getValue
27    
28    // destructor
29    Interface::~Interface() 
30    { 
31       delete ptr; 
32    
33    } // end destructor ~Interface
Описание слайда:
interface.cpp (2 of 2) 21 // call Implementation's getValue function 22 int Interface::getValue() const 23 { 24 return ptr->getValue(); 25 26 } // end function getValue 27 28 // destructor 29 Interface::~Interface() 30 { 31 delete ptr; 32 33 } // end destructor ~Interface

Слайд 78





fig07_23.cpp
(1 of 1)

fig07_23.cpp
output (1 of 1)


1      // Fig. 7.23: fig07_23.cpp
2      // Hiding a class’s private data with a proxy class.
3      #include <iostream>
4      
5      using std::cout;
6      using std::endl;
7      
8      #include "interface.h"  // Interface class definition
9      
10    int main()
11    {
12       Interface i( 5 );
13     
14       cout << "Interface contains: " << i.getValue() 
15            << " before setValue" << endl;
16    
17       i.setValue( 10 );
18    
19       cout << "Interface contains: " << i.getValue() 
20            << " after setValue" << endl;
21    
22       return 0;
23    
24    } // end main
Описание слайда:
fig07_23.cpp (1 of 1) fig07_23.cpp output (1 of 1) 1 // Fig. 7.23: fig07_23.cpp 2 // Hiding a class’s private data with a proxy class. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 #include "interface.h" // Interface class definition 9 10 int main() 11 { 12 Interface i( 5 ); 13 14 cout << "Interface contains: " << i.getValue() 15 << " before setValue" << endl; 16 17 i.setValue( 10 ); 18 19 cout << "Interface contains: " << i.getValue() 20 << " after setValue" << endl; 21 22 return 0; 23 24 } // end main



Похожие презентации
Mypresentation.ru
Загрузить презентацию