Ngôn ngữ lập trình C++ - Chương 6: Cấu trúc dữ liệu trừu tượng

6.1 Giới thiệu

6.2 Cấu trúc - struct

6.3 Truy nhập các thành viên của struct

6.4 Cài đặt kiểu dữliệu người dùng Time bằng struct

6.5 Cài đặt một kiểu dữliệu trừu tượng Time bằng một lớp - class

6.6 Phạm vi lớp và truy nhập các thành viên của lớp

6.7 Tách giao diện ra khỏi cài đặt

6.8 Quản lý quyền truy nhập thành viên

6.9 Các hàm truy nhập và các hàm tiện ích

6.10 Khởi tạo các đối tượng: Constructor

6.11 Sửdụng các đối sốmặc định cho Constructor

6.12 Destructor-hàm hủy

6.13 Khi nào Constructor và Destructor được gọi

6.14 Sửdụng các hàm Set và Get

6.15 Phép gán đối tượng mặc định

pdf82 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 1480 | Lượt tải: 2download
Tóm tắt nội dung Ngôn ngữ lập trình C++ - Chương 6: Cấu trúc dữ liệu trừu tượng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
c in create)
Object 3 destructor runs (local static in main)
Object 1 destructor runs (global before main)
các destructor cho các đối 
tượng tự động địa phương 
trong hàm main được gọi 
theo thứ tự ngược với các 
constructor.
đối tượng static địa 
phương tồn tại cho đến khi 
chương trình kết thúc
đối tượng toàn cục được tạo 
trước khi main bắt đầu và bị
hủy cuối cùng.
các đối tượng tự động địa 
phương bị hủy sau khi hàm 
kết thúc theo thứ tự ngược với 
thứ tự tạo.
đối tượng static địa 
phương được tạo tại lời gọi 
hàm đầu tiên và hủy sau khi 
hàm main kết thúc.
fig06_17.cpp
output (1 of 1)
© 2004 Trần Minh Châu. FOTECH. VNU
69
Chương 6.
6.14 Sử dụng các hàm truy nhập
• Set functions – các hàm ghi
– kiểm tra tính hợp lệ trước khi sửa đổi dữ liệu private
– thông báo nếu các giá trị là không hợp lệ
– thông báo qua các giá trị trả về
• Get functions – các hàm đọc
– các hàm truy vấn – “Query” functions
– quản lý định dạng của dữ liệu trả về
©2004 Trần Minh Châu.
FOTECH. VNU.
70
time3.h (1 of 2)
1 // Fig. 6.18: time3.h
2 // Declaration of class Time.
3 // Member functions defined in time3.cpp
4 
5 // prevent multiple inclusions of header file
6 #ifndef TIME3_H
7 #define TIME3_H
8 
9 class Time {
10 
11 public:
12 Time( int = 0, int = 0, int = 0 ); // default constructor
13 
14 // set functions
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 
20 // get functions 
21 int getHour(); // return hour 
22 int getMinute(); // return minute
23 int getSecond(); // return second
24 
Các hàm ghi
các hàm đọc
©2004 Trần Minh Châu.
FOTECH. VNU.
71
time3.h (2 of 2)
25 void printUniversal(); // output universal-time format
26 void printStandard(); // output standard-time format
27 
28 private:
29 int hour; // 0 - 23 (24-hour clock format)
30 int minute; // 0 - 59
31 int second; // 0 - 59
32 
33 }; // end clas Time
34 
35 #endif
©2004 Trần Minh Châu.
FOTECH. VNU.
72
time3.cpp (1 of 4)
1 // Fig. 6.19: time3.cpp
2 // Member-function definitions for Time class.
3 #include 
4 
5 using std::cout;
6 
7 #include 
8 
9 using std::setfill;
10 using std::setw;
11 
12 // include definition of class Time from time3.h
13 #include "time3.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 hr, int min, int sec ) 
19 { 
20 setTime( hr, min, sec ); 
21 
22 } // end Time constructor
23 
©2004 Trần Minh Châu.
FOTECH. VNU.
73
time3.cpp (2 of 4)
24 // set hour, minute and second values
25 void Time::setTime( int h, int m, int s )
26 {
27 setHour( h ); 
28 setMinute( m );
29 setSecond( s );
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 
Gọi các hàm set dể kiểm tra 
tính hợp lệ.
Các hàm set kiểm tra tính hợp 
lệ trước khi sửa đổi dữ liệu.
©2004 Trần Minh Châu.
FOTECH. VNU.
74
time3.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() 
56 { 
57 return hour; 
58 
59 } // end function getHour
60 
61 // return minute value 
62 int Time::getMinute() 
63 { 
64 return minute; 
65 
66 } // end function getMinute
67 
Các hàm set kiểm tra tính hợp 
lệ trước khi sửa đổi dữ liệu.
Các hàm get cho client đọc dữ
liệu
©2004 Trần Minh Châu.
FOTECH. VNU.
75
time3.cpp (4 of 4)
68 // return second value 
69 int Time::getSecond() 
70 { 
71 return second; 
72 
73 } // end function getSecond
74 
75 // print Time in universal format
76 void Time::printUniversal()
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()
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
Hàm get cho client đọc dữ liệu
©2004 Trần Minh Châu.
FOTECH. VNU.
76
fig06_20.cpp
(1 of 3)
1 // Fig. 6.20: fig06_20.cpp
2 // Demonstrating the Time class set and get functions
3 #include 
4 
5 using std::cout;
6 using std::endl;
7 
8 // include definition of class Time from time3.h
9 #include "time3.h"
10 
11 void incrementMinutes( Time &, const int ); // prototype
12 
13 int main()
14 {
15 Time t; // create Time object
16 
17 // set time using individual set functions 
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 
Gọi các hàm set để gán các 
giá trị hợp lệ.
©2004 Trần Minh Châu.
FOTECH. VNU.
77
fig06_20.cpp
(2 of 3)
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();
27 
28 // set time using individual set functions 
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 
33 // display hour, minute and second after setting 
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()
38 << " Second: " << t.getSecond() << "\n\n";
39 
40 t.setTime( 11, 58, 0 ); // set time
41 incrementMinutes( t, 3 ); // increment t's minute by 3
42 
43 return 0;
44 
45 } // end main
46 
Cố dùng các hàm set để gán 
các giá trị không hợp lệ.
các giá trị không hợp lệ làm 
các data member bị gán về 0.
Sửa đổi data member bằng 
hàm setTime.
©2004 Trần Minh Châu.
FOTECH. VNU.
78
fig06_20.cpp
(3 of 3)
47 // add specified number of minutes to a Time object
48 void incrementMinutes( Time &tt, const int count )
49 {
50 cout << "Incrementing minute " << count
51 << " times:\nStart time: ";
52 tt.printStandard();
53 
54 for ( int i = 0; i < count; i++ ) {
55 tt.setMinute( ( tt.getMinute() + 1 ) % 60 ); 
56 
57 if ( tt.getMinute() == 0 )
58 tt.setHour( ( tt.getHour() + 1 ) % 24);
59 
60 cout << "\nminute + 1: ";
61 tt.printStandard();
62 
63 } // end for
64 
65 cout << endl;
66 
67 } // end function incrementMinutes
Dùng các hàm get để đọc và
các hàm set để sửa dữ liệu.
Result of setting all valid values:
Hour: 17 Minute: 34 Second: 25
Result of attempting to set invalid hour and second:
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
Cố gắng gán các giá trị không 
hợp lệ cho các thành viên dữ
liệu, kết quả là thông báo lỗi 
và các thành viên bị gán về 0.
© 2004 Trần Minh Châu. FOTECH. VNU
79
Chương 6.
6.15 Phép gán mặc định
• Gán đối tượng cho đối tượng
– Phép gán (=)
• có thể gán một đối tượng cho một đối tượng khác thuộc cùng kiểu
• Mặc định: gán theo từng thành viên (memberwise assignment)
– Mỗi thành viên của đối tượng vế phải được gán cho thành viên 
tương ứng tại vế trái
• được ngầm thực hiện khi
– truyền tham số là đối tượng 
– trả về đối tượng
• Đối tượng có thể được truyền làm tham số cho hàm
– Đối tượng có thể được hàm trả về
– Mặc định: pass-by-value
• Bản sao của đối tượng được truyền, trả về
– sử dụng 'copy constructor'
• sao chép các giá trị gốc vào đối tượng mới
©2004 Trần Minh Châu.
FOTECH. VNU.
80
fig06_24.cpp 
(1 of 3)
1 // Fig. 6.24: fig06_24.cpp 
2 // Demonstrating that class objects can be assigned
3 // to each other using default memberwise assignment.
4 #include 
5 
6 using std::cout;
7 using std::endl;
8 
9 // class Date definition
10 class Date {
11 
12 public:
13 Date( int = 1, int = 1, int = 1990 ); // default constructor
14 void print();
15 
16 private:
17 int month;
18 int day;
19 int year;
20 
21 }; // end class Date
22 
©2004 Trần Minh Châu.
FOTECH. VNU.
81
fig06_24.cpp 
(2 of 3)
23 // Date constructor with no range checking
24 Date::Date( int m, int d, int y )
25 {
26 month = m;
27 day = d;
28 year = y;
29 
30 } // end Date constructor
31 
32 // print Date in the format mm-dd-yyyy
33 void Date::print() 
34 { 
35 cout << month << '-' << day << '-' << year; 
36 
37 } // end function print
38 
39 int main()
40 {
41 Date date1( 7, 4, 2002 );
42 Date date2; // date2 defaults to 1/1/1990
43 
©2004 Trần Minh Châu.
FOTECH. VNU.
82
fig06_24.cpp 
(3 of 3)
fig06_24.cpp 
output (1 of 1)
44 cout << "date1 = ";
45 date1.print();
46 cout << "\ndate2 = ";
47 date2.print();
48 
49 date2 = date1; // default memberwise assignment
50 
51 cout << "\n\nAfter default memberwise assignment, date2 = ";
52 date2.print();
53 cout << endl;
54 
55 return 0;
56 
57 } // end main
date1 = 7-4-2002
date2 = 1-1-1990
After default memberwise assignment, date2 = 7-4-2002
phép gán mặc định gán từng 
thành viên của date1 cho 
thành viên tương ứng của
date2.

File đính kèm:

  • pdfNgôn ngữ lập trình C++ - Chương 6 Cấu trúc dữ liệu trừu tượng.pdf