88
2003 Prentice Hall, Inc. All rights reserved. 1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πληροφορικής Πανεπιστήμιο Πατρών Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ( ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ( C+ C+ +) +) Τάξεις και Αφαίρεση Δεδομένων Τάξεις και Αφαίρεση Δεδομένων 25-11-2008

Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής

Embed Size (px)

DESCRIPTION

Πανεπιστήμιο Πατρών. Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής. ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ( C++). Τάξεις και Αφαίρεση Δεδομένων. 25-11-2008. - PowerPoint PPT Presentation

Citation preview

Τξεις και Αφαρεση ΔεδομνωνΤμμα Μηχανικν Ηλεκτρονικν Υπολογιστν και Πληροφορικς
Πανεπιστμιο Πατρν
Outline
6.4 Υλοποηση τπου Time με struct απ το χρστη
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
6.6 Εμβλεια τξης και προσπλαση μελν
6.7 Διαχωρζοντας διεπαφ απ την υλοποηση
6.8 λεγχος πρσβασης στα μλη
6.9 Συναρτσεις πρσβασης και βοηθητικς συναρτσεις
6.10 Αρχικοποιντας τα αντικεμενα τξης: Constructors
6.11 Χρση Default παραμτρων με Constructors
6.12 Destructors
6.14 Using Set and Get Functions
6.15 Subtle Trap: Returning a Reference to a
private Data Member
6.1 Εισαγωγ
Αντικειμενοστραφς Προγραμματισμς
Οντοκεντρικς Προγραμματισμς
Απκρυψη πληροφορας
Οι τξεις (αντικεμενα) επικοινωνον με καλς ορισμνες διεπαφς
Οι λεπτομρειες της υλοποησης βρσκονται κρυμμνες μσα στις διες τις τξεις
Τποι οριζμενοι απ το χρστη: τξεις
Δεδομνα (data members)
κφανση-εκτλεση τξης: αντικεμενο
6.2 Ορισμς Δομν-Structure
Καθορζουν τπους που προκπτουν απ τη συνθροιση μελν λλων τπων
struct Time {
int hour;
int minute;
int second;
Στην δια struct: πρπει να δνονται μοναδικ ονματα
Σε διαφορετικς structs: μπορον τα ονματα να διαμοιρζονται
Ο ορισμς struct τελεινει πντα με ερωτηματικ
Structure tag
Structure members
6.2 Ορισμς Δομν-Structure
Αυτ-αναφερμενη δομ-struct
Τα μλη μιας Structure δε μπορε να εναι εκφνσεις (instance) εμφωλευμνης struct
Τα μλη μιας Structure μπορον να εναι δεκτης σε μια instance εμφωλευμνης struct (αυτ-αναφερμενη structure)
Χρησιμο για διασυνδεδεμνες λστες, ουρς, στοβες και δνδρα
struct
Δημιουργε ναν νο τπο δεδομνων που χρησιμοποιεται για να δηλσει κανες μεταβλητς
Δηλνονται πως και οι λοιπς μεταβλητς λλων τπων
Παραδεγματα:
6.3 Προσπλαση μελν Structure
Τελεστς τελεα (.) για μλη δομς-structure και τξης
Τελεστς βλος (->) για μλη δομς-structure και τξης μσω δεκτη σε αντικεμενο
Εκτπωση μλους hour του timeObject:
cout << timeObject.hour;
Οι παρενθσεις απαιτονται
2003 Prentice Hall, Inc. All rights reserved.
6.4 Υλοποηση τπου Time με struct απ το χρστη
Default: οι δομς-structures περνον με τιμ
Πρασμα με αναφορ
C-style structures
Δεν υπρχει διεπαφ “interface”
Εν αλλξει η υλοποηση, λα τα προγρμματα που χρησιμοποιον τη struct πρπει να αλλξουν ανλογα
Δε μπορε να εκτυπωθε ως ενιαα μονδα
Κθε μλος εκτυπνεται/διαμορφνεται χωριστ
Πρπει να συγκριθον λα τα μλη να-να
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_01.cpp
2 // Create a structure, set its members, and print it.
3 #include <iostream>
16 int minute; // 0-59
17 int second; // 0-59
23
Ορισμς τπου δομς-structure Time με τρα μλη integer.
Πρασμα με αναφορ σε αντικεμενα Time για να μην χουμε overhead αντιγραφς.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_01.cpp
27
31
33 printUniversal( dinnerTime );
35 printStandard( dinnerTime );
37
40
42 printUniversal( dinnerTime );
43 cout << endl;
Χρησιμοποιομε τελεστ τελεα για να αρχικοποισουμε τα μλη της δομς.
Απευθεας πρσβαση σε δεδομνα επιτρπει την ανθεση λανθασμνων τιμν.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_01.cpp
51 {
53 << setw( 2 ) << t.minute << ":"
54 << setw( 2 ) << t.second;
60 {
63 << setw( 2 ) << t.minute << ":"
64 << setw( 2 ) << t.second
66
which is 6:30:00 PM standard time.
 
Χρση τελεας για πρσβαση στα μλη δεδομνων.
2003 Prentice Hall, Inc. All rights reserved.
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
Τξεις
Μλη συναρτσεις
Ιδιωτικ - private:
Προστατευμενο - protected:
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
Συνρτηση Constructor
Καλεται ταν παργεται το αντικεμενο
Μπορε να υπρχουν πολλο constructors
Υπερφρτωση συναρτσεων Function
Outline
5 void setTime( int, int, int ); // set hour, minute, second
6 void printUniversal(); // print universal-time format
7 void printStandard(); // print standard-time format
8
11 int minute; // 0 - 59
12 int second; // 0 - 59
13
Ξεκιν με αριστερ γκιστρο.
Ο ορισμς τελεινει με ερωτηματικ.
Δημσια μλη συναρτσεις public.
Ιδιωτικ μλη δεδομνα - private προσπελσιμα μνο στις συναρτσεις της τξης
Ο Constructor χει το διο νομα με την τξη, Time, και δεν χει τπο
2003 Prentice Hall, Inc. All rights reserved.
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
Αντικεμενα της τξης
Το νομα τξης εναι νας προσδιοριστς ενς νου τπου
Example:
Time arrayOfTimes[ 5 ]; // array of Time objects
Time *pointerToTime; // pointer to a Time object
Time &dinnerTime = sunset; // reference to a Time object
Το νομα τξης προσδιορζει να νο τπο
2003 Prentice Hall, Inc. All rights reserved.
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
Μλη συναρτσεις εκτς τξης
Binary scope resolution operator (::)
Προσδιορζει μοναδικ τις συναρτσεις συγκεκριμνων τξεων
Διαφορετικς τξεις μπορον να χουν συναρτσεις μλη με το διο νομα
Μορφ για τον ορισμ συναρτσεων μελν
ReturnType ClassName::MemberFunctionName( ){
Μλη συναρτσεις εντς τξης
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_03.cpp
14 class Time {
18 void setTime( int, int, int ); // set hour, minute, second
19 void printUniversal(); // print universal-time format
20 void printStandard(); // print standard-time format
21
Outline
fig06_03.cpp
24 int minute; // 0 - 59
25 int second; // 0 - 59
26
29 // Time constructor initializes each data member to zero and
30 // ensures all Time objects start in a consistent state
31 Time::Time()
34
37 // set new Time value using universal time, perform validity
38 // checks on the data values and set invalid values to zero
39 void Time::setTime( int h, int m, int s )
40 {
44
Ο Constructor αρχικοποιε τα private δεδομνα στην τιμ μηδν (0).
Η public συνρτηση ελγχει τις τιμς των παραμτρων πριν ορσει τα private δεδομνα.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_03.cpp
48 void Time::printUniversal()
51 << setw( 2 ) << minute << ":"
52 << setw( 2 ) << second;
57 void Time::printStandard()
60 << ":" << setfill( '0' ) << setw( 2 ) << minute
61 << ":" << setw( 2 ) << second
63
69
Χωρς παραμτρους ! (γνωρζει implicitly τι σκοπς εναι να εκτυπωθον μλη δεδομνα! τσι γνεται περιεκτικτερη η κλση των συναρτσεων.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_03.cpp
72 t.printUniversal(); // 00:00:00
75 t.printStandard(); // 12:00:00 AM
78
80 cout << "\n\nUniversal time after setTime is ";
81 t.printUniversal(); // 13:27:06
84 t.printStandard(); // 1:27:06 PM
87
89 cout << "\n\nAfter attempting invalid settings:"
90 << "\nUniversal time: ";
91 t.printUniversal(); // 00:00:00
Ορζουμε τα μλη δεδομνα χρησιμοποιντας τη public συνρτηση μλος.
Προσπθεια να περσουμε λθος τιμς με χρση της public συνρτησης.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_03.cpp
The initial standard time is 12:00:00 AM
 
Standard time after setTime is 1:27:06 PM
 
Standard time: 12:00:00 AM
Τα μλη δεδομνων γνονται μηδν (0) μετ απ τις λθος τιμς που δθηκαν.
2003 Prentice Hall, Inc. All rights reserved.
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
Destructors
Προηγεται το σημδι μαθηματικς ρνησης (tilde) (~)
Χωρς παραμτρους
6.5 Υλοποηση αφηρημνου τπου Time με τξη class
Πλεονεκτματα χρσης τξεων
Απλοποιον τον προγραμματισμ
Κληρονομικτητα
2003 Prentice Hall, Inc. All rights reserved.
6.6 Εμβλεια τξης και προσπλαση μελν
Εμβλεια τξης
Αναφορ με το νομα
2003 Prentice Hall, Inc. All rights reserved.
6.6 Εμβλεια τξης και προσπλαση μελν
Εμβλεια συνρτησης
Μεταβλητς με διο νομα με μεταβλητς εμβλειας τξης
Η εμβλεια της μεταβλητς τξης «κρβεται»
Προσπλαση με τελεστ καθορισμο εμβλειας (::)
ClassName::classVariableName
2003 Prentice Hall, Inc. All rights reserved.
6.6 Εμβλεια τξης και προσπλαση μελν
Τελεστς για προσπλαση μελν τξης
δια με των structs
Outline
fig06_04.cpp
3 //
5 #include <iostream>
22
Το x public χρησιμοποιεται ως παρδειγμα μνο. Τυπικ τα δεδομνα εναι private.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_04.cpp
26 Count *counterPtr = &counter; // create pointer to counter
27 Count &counterRef = counter; // create reference to counter
28
29 cout << "Assign 1 to x and print using the object's name: ";
30 counter.x = 1; // assign 1 to data member x
31 counter.print(); // call member function print
32
33 cout << "Assign 2 to x and print using a reference: ";
34 counterRef.x = 2; // assign 2 to data member x
35 counterRef.print(); // call member function print
36
37 cout << "Assign 3 to x and print using a pointer: ";
38 counterPtr->x = 3; // assign 3 to data member x
39 counterPtr->print(); // call member function print
40
43 } // end main
Assign 1 to x and print using the object's name: 1
Assign 2 to x and print using a reference: 2
Assign 3 to x and print using a pointer: 3
Χρση τελεας για την επιλογ μλους δεδομνου απ το αντικεμενο counter
Χρση τελεας για την επιλογ μλους στην αναφορ counterRef στο αντικεμενο.
Χρση βλους για το δεκτη counterPtr στο αντικεμενο.
2003 Prentice Hall, Inc. All rights reserved.
6.7 Διαχωρζοντας τη διεπαφ απ την υλοποηση
Διαχωρζοντας τη διεπαφ απ την υλοποηση
Πλεονκτημα
Μειονκτημα
Header αρχεα
Περιλαμβνονται σε κθε αρχεο
Outline
3 // Member functions are defined in time1.cpp
4
6 #ifndef TIME1_H
7 #define TIME1_H
10 class Time {
14 void setTime( int, int, int ); // set hour, minute, second
15 void printUniversal(); // print universal-time format
16 void printStandard(); // print standard-time format
17
20 int minute; // 0 - 59
21 int second; // 0 - 59
22
Κδικας δεν περιλαμβνεται αν χει οριστε η TIME1_H
“If not defined”
Ονοματολογα:
το νομα του αρχεου header με το underscore να αντικαθιστ την τελεα.
2003 Prentice Hall, Inc. All rights reserved.
Outline
3 #include <iostream>
13 #include "time1.h"
16 // Ensures all Time objects start in a consistent state.
17 Time::Time()
20
Περληψη του αρχεου header time1.h.
Το νομα αρχεου μσα σε quotes. ταν χρησιμοποιονται οι ανιστητες θεωρετε τι εναι μρος της C++ Standard Library.
2003 Prentice Hall, Inc. All rights reserved.
Outline
23 // Set new Time value using universal time. Perform validity
24 // checks on the data values. Set invalid values to zero.
25 void Time::setTime( int h, int m, int s )
26 {
30
34 void Time::printUniversal()
37 << setw( 2 ) << minute << ":"
38 << setw( 2 ) << second;
Outline
43 void Time::printStandard()
46 << ":" << setfill( '0' ) << setw( 2 ) << minute
47 << ":" << setw( 2 ) << second
49
Outline
fig06_07.cpp
3 // NOTE: This file must be compiled with time1.cpp.
4 #include <iostream>
10 #include "time1.h"
15
18 t.printUniversal(); // 00:00:00
20 t.printStandard(); // 12:00:00 AM
23
Περληψη του time1.h για τη σωστ δημιουργα/ χειρισμ και καθορισμ του μεγθους του αντικειμνου τξης Time.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_07.cpp
25 cout << "\n\nUniversal time after setTime is ";
26 t.printUniversal(); // 13:27:06
28 t.printStandard(); // 1:27:06 PM
31
33 cout << "\n\nAfter attempting invalid settings:"
34 << "\nUniversal time: ";
35 t.printUniversal(); // 00:00:00
The initial standard time is 12:00:00 AM
 
Standard time after setTime is 1:27:06 PM
2003 Prentice Hall, Inc. All rights reserved.
6.8 λεγχος πρσβασης στα μλη
Εππεδα πρσβασης
public
protected
Outline
fig06_08.cpp
4 #include <iostream>
9 #include "time1.h"
14
15
17
19 cout << "minute = " << t.minute;
23 } // end main
Το hour εναι private. ρα η προσπθεια προσπλασης του δνει λθος.
Το minute εναι private. ρα η προσπθεια προσπλασης του δνει λθος.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_08.cpp
'hour' : cannot access private member declared in class 'Time'
D:\cpphtp4_examples\ch06\Fig6_06\Fig06_06.cpp(19) : error C2248:
'minute' : cannot access private member declared in class 'Time'
Τα λθη που δημιουργονται κατ την προσπλαση μελν private.
2003 Prentice Hall, Inc. All rights reserved.
6.8 λεγχος πρσβασης στα μλη
Πρσβαση σε μλη τξης
struct
Πρσβαση σε private δεδομνα τξης
Ελγχονται με συναρτσεις πρσβασης (accessor methods)
Συνρτηση Get
6.9 Συναρτσεις πρσβασης και βοηθητικς συναρτσεις
Συναρτσεις πρσβασης
private
Δεν χουν δημιουργηθε για χρση απ τον τελικ χρστη
2003 Prentice Hall, Inc. All rights reserved.
Outline
4 #ifndef SALESP_H
5 #define SALESP_H
12 void setSales( int, double ); // set sales for a month
13 void printAnnualSales(); // summarize and print sales
14
17 double sales[ 12 ]; // 12 monthly sales figures
18
private βοηθητικ συνρτηση
Outline
3 #include <iostream>
15 #include "salesp.h"
18 SalesPerson::SalesPerson()
21 sales[ i ] = 0.0;
Outline
salesp.cpp (2 of 3)
25 // get 12 sales figures from the user at the keyboard
26 void SalesPerson::getSalesFromUser()
32 cin >> salesFigure;
38
39 // set one of the 12 monthly sales figures; function subtracts
40 // one from month value for proper subscript in sales array
41 void SalesPerson::setSales( int month, double amount )
42 {
45 sales[ month - 1 ] = amount; // adjust for subscripts 0-11
46
48 cout << "Invalid month or sales figure" << endl;
Η συνρτηση Set κνει ελγχους.
2003 Prentice Hall, Inc. All rights reserved.
Outline
52 // print total annual sales (with help of utility function)
53 void SalesPerson::printAnnualSales()
56 << "\nThe total annual sales are: $"
57 << totalAnnualSales() << endl; // call utility function
58
62 double SalesPerson::totalAnnualSales()
65
66 for ( int i = 0; i < 12; i++ ) // summarize sales results
67 total += sales[ i ];
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_11.cpp
3 // Compile this program with salesp.cpp
4
6 #include "salesp.h"
11
13 s.printAnnualSales(); // control structures in main
14
17 } // end main
Σειριακ κλση των συναρτσεων. Η λογικ εναι εμφωλευμνη σε συναρτσεις μλη.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_11.cpp
 
2003 Prentice Hall, Inc. All rights reserved.
6.10 Αρχικοποηση αντικειμνων τξης: Constructors
Constructors
Δεν χει τπο επιστροφς
Class-type ObjectName( value1,value2,…);
6.11 Χρση Default παραμτρων στους Constructors
Constructors
Default constructors
2003 Prentice Hall, Inc. All rights reserved.
Outline
3 // Member functions defined in time2.cpp.
4
6 #ifndef TIME2_H
7 #define TIME2_H
10 class Time {
13 Time( int = 0, int = 0, int = 0); // default constructor
14 void setTime( int, int, int ); // set hour, minute, second
15 void printUniversal(); // print universal-time format
16 void printStandard(); // print standard-time format
17
20 int minute; // 0 - 59
21 int second; // 0 - 59
22
2003 Prentice Hall, Inc. All rights reserved.
Outline
3 #include <iostream>
13 #include "time2.h"
16 // ensures all Time objects start in a consistent state
17 Time::Time( int hr, int min, int sec )
18 {
20
22
Ο Constructor καλε τη setTime για να δηλσει να ελγξει τιμς.
2003 Prentice Hall, Inc. All rights reserved.
Outline
23 // set new Time value using universal time, perform validity
24 // checks on the data values and set invalid values to zero
25 void Time::setTime( int h, int m, int s )
26 {
30
34 void Time::printUniversal()
37 << setw( 2 ) << minute << ":"
38 << setw( 2 ) << second;
Outline
43 void Time::printStandard()
46 << ":" << setfill( '0' ) << setw( 2 ) << minute
47 << ":" << setw( 2 ) << second
49
Outline
fig06_14.cpp
3 #include <iostream>
9 #include "time2.h"
14 Time t2( 2 ); // minute and second defaulted
15 Time t3( 21, 34 ); // second defaulted
16 Time t4( 12, 25, 42 ); // all values specified
17 Time t5( 27, 74, 99 ); // all bad values specified
18
20 << "all default arguments:\n ";
21 t1.printUniversal(); // 00:00:00
22 cout << "\n ";
Αρχικοποηση του αντικειμνου Time με default παραμτρους.
Initialize Time object with invalid values; validity checking will set values to 0.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_14.cpp
25 cout << "\n\nhour specified; default minute and second:\n ";
26 t2.printUniversal(); // 02:00:00
27 cout << "\n ";
30 cout << "\n\nhour and minute specified; default second:\n ";
31 t3.printUniversal(); // 21:34:00
32 cout << "\n ";
36 t4.printUniversal(); // 12:25:42
37 cout << "\n ";
41 t5.printUniversal(); // 00:00:00
42 cout << "\n ";
48 } // end main
t5 με λθος παραμτρους, οπτε οι τιμς γνονται λες μηδν (0).
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_14.cpp
02:00:00
21:34:00
12:25:42
6.12 Destructors
Προηγεται η ρνηση (~)
2003 Prentice Hall, Inc. All rights reserved.
6.13 Καλντας Constructors και Destructors
Constructors και destructors
Εξαρτται απ τη σειρ εκτλεσης
ταν η εκτλεση μπανει φεγει απ την εμβλεια των αντικειμνων
Γενικ, ο destructor καλε σε αντστροφη σειρ απ τους constructor
2003 Prentice Hall, Inc. All rights reserved.
6.13 Καλντας Constructors και Destructors
Σειρ της κλσης constructor, destructor
Αντικεμενα Global εμβλειας
Destructors
Δε καλεται με τερματισμ abort
Τοπικ αντικεμενα
Destructors
Η εκτλεση φεγει απ το block που ορζονται
Δε καλεται σε τερματισμ exit abort
2003 Prentice Hall, Inc. All rights reserved.
6.13 Καλντας Constructors και Destructors
Σειρ της κλσης constructor, destructor
static τοπικ αντικεμενα
Destructors
Δε καλεται στο abort
Outline
3 // Member functions defined in create.cpp.
4 #ifndef CREATE_H
5 #define CREATE_H
11 ~CreateAndDestroy(); // destructor
private members to show order of constructor, destructor function calls.
2003 Prentice Hall, Inc. All rights reserved.
Outline
3 #include <iostream>
9 #include "create.h"
14 {
19 << message << endl;
2003 Prentice Hall, Inc. All rights reserved.
Outline
27 cout << ( objectID == 1 || objectID == 6 ? "\n" : "" );
28
30 << message << endl;
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_17.cpp
3 // destructors are called.
10 #include "create.h"
13
16
20
22
25
automatic αντικεμενο.
static αντικεμενο.
Outline
fig06_17.cpp
27
29
31
33
39 void create( void )
42
44
47
50
Outline
fig06_17.cpp
52
Outline
fig06_17.cpp
 
 
 
 
 
 
Object 1 destructor runs (global before main)
Destructors for local automatic objects in main called in reverse order of constructors.
Τα static αντικεμενα υπρχουν ως τον τερματισμ προγρμματος.
Το Global αντικεμενο δημιουργετε πριν τη main και καταστρφεται τελευταο.
Τα automatic αντικεμενα καταστρφονται με τον τερματισμ της συνρτησης αντστροφα απ ,τι δημιουργθηκαν.
Τα static αντικεμενα δημιουργονται με την κλση της συνρτησης και καταστρφονται με τον τερματισμ της main.
2003 Prentice Hall, Inc. All rights reserved.
6.14 Χρση των Set και Get Συναρτσεων
Συνρτηση Set
Ειδοποιε αν υπρχουν λανθασμνες τιμς
Συνρτηση Get
Outline
3 // Member functions defined in time3.cpp
4
6 #ifndef TIME3_H
7 #define TIME3_H
12 Time( int = 0, int = 0, int = 0 ); // default constructor
13
15 void setTime( int, int, int ); // set hour, minute, second
16 void setHour( int ); // set hour
17 void setMinute( int ); // set minute
18 void setSecond( int ); // set second
19
24
Set.
Get.
Outline
27
30 int minute; // 0 - 59
31 int second; // 0 - 59
32
Outline
3 #include <iostream>
13 #include "time3.h"
16 // calls member function setTime to set variables;
17 // default values are 0 (see class definition)
18 Time::Time( int hr, int min, int sec )
19 {
21
Outline
25 void Time::setTime( int h, int m, int s )
26 {
35 {
37
42 {
44
Οι συναρτσεις Set ελγχουν τα δεδομνα προτο τα μετατρψουν.
2003 Prentice Hall, Inc. All rights reserved.
Outline
49 {
51
Οι συναρτσεις Get επιτρπουν την ανγνωση των δεδομνων.
2003 Prentice Hall, Inc. All rights reserved.
Outline
76 void Time::printUniversal()
79 << setw( 2 ) << minute << ":"
80 << setw( 2 ) << second;
85 void Time::printStandard()
88 << ":" << setfill( '0' ) << setw( 2 ) << minute
89 << ":" << setw( 2 ) << second
91
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_20.cpp
3 #include <iostream>
9 #include "time3.h"
12
16
18 t.setHour( 17 ); // set hour to valid value
19 t.setMinute( 34 ); // set minute to valid value
20 t.setSecond( 25 ); // set second to valid value
21
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_20.cpp
22 // use get functions to obtain hour, minute and second
23 cout << "Result of setting all valid values:\n"
24 << " Hour: " << t.getHour()
25 << " Minute: " << t.getMinute()
26 << " Second: " << t.getSecond();
29 t.setHour( 234 ); // invalid hour set to 0
30 t.setMinute( 43 ); // set minute to valid value
31 t.setSecond( 6373 ); // invalid second set to 0
32
34 // invalid hour and second values
35 cout << "\n\nResult of attempting to set invalid hour and"
36 << " second:\n Hour: " << t.getHour()
37 << " Minute: " << t.getMinute()
39
41 incrementMinutes( t, 3 ); // increment t's minute by 3
42
Προσπθεια ορισμο λανθασμνων τιμν με χρση set.
Οι λθος τιμς χουν ως αποτλεσμα να οριστον οι μεταβλητς σε 0.
Μετατροπ δεδομνων με τη setTime.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_20.cpp
47 // add specified number of minutes to a Time object
48 void incrementMinutes( Time &tt, const int count )
49 {
51 << " times:\nStart time: ";
55 tt.setMinute( ( tt.getMinute() + 1 ) % 60 );
56
59
Με τις get διαβζονται δεδομνα και με τις set τροποποιονται.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_20.cpp
 
Hour: 0 Minute: 43 Second: 0
 
Incrementing minute 3 times:
Start time: 11:58:00 AM
minute + 1: 11:59:00 AM
minute + 1: 12:00:00 PM
minute + 1: 12:01:00 PM
Προσπθεια να οριστον λθος τιμς που καταλγει σε μνυμα λθους και τιμ μηδν (0)
2003 Prentice Hall, Inc. All rights reserved.
6.15 Προσοχ: Επιστροφ αναφορς σε δεδομνα private
Αναφορ σε αντικεμενο
Lvalue
Αλλζει το αρχικ αντικεμενο
public συναρτσεις μπορον να επιστρφουν μη-const αναφορς σε δεδομνα private
Κατ συνπεια ο χρστης μπορε να τροποποιε δεδομνα private
2003 Prentice Hall, Inc. All rights reserved.
Outline
3 // Member functions defined in time4.cpp
4
6 #ifndef TIME4_H
7 #define TIME4_H
13 void setTime( int, int, int );
14 int getHour();
17
Συνρτηση που δεχνει τα αποτελσματα επιστροφς αναφορς σε δεδομνα private.
2003 Prentice Hall, Inc. All rights reserved.
Outline
3
5 #include "time4.h"
8 // calls member function setTime to set variables;
9 // default values are 0 (see class definition)
10 Time::Time( int hr, int min, int sec )
11 {
13
17 void Time::setTime( int h, int m, int s )
18 {
22
Outline
34 int &Time::badSetHour( int hh )
35 {
37
39
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_23.cpp
3 // returns a reference to a private data member.
4 #include <iostream>
10 #include "time4.h"
17 int &hourRef = t.badSetHour( 20 );
18
20
21 // use hourRef to set invalid value in Time object t
22 hourRef = 30;
25
Η αναφορ επιτρπει να οριστε τιμ στη private hour.
2003 Prentice Hall, Inc. All rights reserved.
Outline
fig06_23.cpp
27 // a reference can be used as an lvalue!
28 t.badSetHour( 12 ) = 74;
32 << "badSetHour as an lvalue, Hour: "
33 << t.getHour()
*********************************
Μπορε να χρησιμοποιηθε κλση συνρτησης σε ανθεση λθους τιμς
Η επιστροφ αναφορς επιτρπει τον ορισμ λθους τιμς σε private δεδομνα.
2003 Prentice Hall, Inc. All rights reserved.
6.16 Default Ανθεση
Μπορε να αναθσει σε να αντικεμενο να λλο διου τπου
Default ανθεση
Περνντας και επιστρφοντας αντικεμενα
Αντικεμενα επιστρφονται απ συναρτσεις
Default πρασμα με τιμ
Αντγραφο τουconstructor
Outline
fig06_24.cpp
4 #include <iostream>
13 Date( int = 1, int = 1, int = 1990 ); // default constructor
14 void print();
Outline
fig06_24.cpp
24 Date::Date( int m, int d, int y )
25 {
33 void Date::print()
36
42 Date date2; // date2 defaults to 1/1/1990
43
Outline
fig06_24.cpp
50
52 date2.print();
After default memberwise assignment, date2 = 7-4-2002
Η Default ανθεση ορζει σε κθε μλος του date2 κθε μλος του date1 ανεξρτητα.
2003 Prentice Hall, Inc. All rights reserved.
6.17 Επαναχρησιμοποηση Κδικα
Rapid applications development (RAD)