Ngôn ngữ lập trình C++ - Chương 3: Hàm

3.1 Giới thiệu

3.2 Các thành phần của chương trình C++

3.3 Các hàm trong thưviện toán học

3.4 Hàm

3.5 Định nghĩa hàm (Function Definition)

3.6 Nguyên mẫu hàm (Function Prototype)

3.7 Header File

3.8 Sinh sốngẫu nhiên

3.9 Ví dụ: Trò chơi may rủi và Giới thiệu vềkiểu enum

3.10 Các kiểulưu trữ(Storage Class)

3.11 Các quy tắc phạm vi (Scope Rule)

3.12 Đệquy (Recursion)

3.13 Ví dụsửdụng đệquy: chuỗi Fibonacci

3.14 So sánh Đệquy và Vòng lặp

3.15 Hàm với danh sách đối sốrỗng

pdf43 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 1709 | Lượt tải: 3download
Tóm tắt nội dung Ngôn ngữ lập trình C++ - Chương 3: Hàm, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 } // end main
30 
31 // squareByValue multiplies number by itself, stores the 
32 // result in number and returns the new value of number 
33 int squareByValue( int number ) 
34 { 
35 return number *= number; // caller's argument not modified
36 
37 } // end function squareByValue
38 
39 // squareByReference multiplies numberRef by itself and 
40 // stores the result in the variable to which numberRef
41 // refers in function main 
42 void squareByReference( int &numberRef ) 
43 { 
44 numberRef *= numberRef; // caller's argument modified
45 
46 } // end function squareByReference 
thay đổi number, nhưng đối số gốc
(x) không bị thay đổi.
thay đổi numberRef, một biệt danh 
của đối số gốc. Do đó, z bị thay đổi.
©2004 Trần Minh Châu.
FOTECH. VNU.
71
fig03_20.cpp
output (1 of 1)
x = 2 before squareByValue
Value returned by squareByValue: 4
x = 2 after squareByValue
z = 4 before squareByReference
z = 16 after squareByReference
© 2004 Trần Minh Châu. FOTECH. VNU
72
Chương 3.
3.18 Các đối số mặc định
• Lời gọi hàm với các tham số được bỏ qua
– Nếu không đủ số tham số, các vị trí ở bên phải nhất sẽ được 
nhận giá trị mặc định của chúng
– Các giá trị mặc định
• Có thể là hằng, biến toàn cục, hoặc các lời gọi hàm
• Đặt các giá trị mặc định tại function prototype
int myFunction( int x = 1, int y = 2, int z = 3 );
– myFunction(3)
• x = 3, y và z nhận giá trị mặc định (bên phải nhất)
– myFunction(3, 5)
• x = 3, y = 5 còn z nhận giá trị mặc định
©2004 Trần Minh Châu.
FOTECH. VNU.
73
fig03_23.cpp
(1 of 2)
1 // Fig. 3.23: fig03_23.cpp
2 // Using default arguments.
3 #include 
4 
5 using std::cout;
6 using std::endl;
7 
8 // function prototype that specifies default arguments
9 int boxVolume( int length = 1, int width = 1, int height = 1 );
10 
11 int main()
12 {
13 // no arguments--use default values for all dimensions
14 cout << "The default box volume is: " << boxVolume();
15 
16 // specify length; default width and height
17 cout << "\n\nThe volume of a box with length 10,\n"
18 << "width 1 and height 1 is: " << boxVolume( 10 );
19 
20 // specify length and width; default height
21 cout << "\n\nThe volume of a box with length 10,\n"
22 << "width 5 and height 1 is: " << boxVolume( 10, 5 );
23 
Các giá trị mặc định được đặt 
trong function prototype.
Các lời gọi hàm thiếu một 
số đối số – Các đối số bên 
phải nhất nhận giá trị mặc 
định.
©2004 Trần Minh Châu.
FOTECH. VNU.
74
fig03_23.cpp
(2 of 2)
fig03_23.cpp
output (1 of 1)
24 // specify all arguments
25 cout << "\n\nThe volume of a box with length 10,\n"
26 << "width 5 and height 2 is: " << boxVolume( 10, 5, 2 )
27 << endl;
28 
29 return 0; // indicates successful termination
30 
31 } // end main
32 
33 // function boxVolume calculates the volume of a box
34 int boxVolume( int length, int width, int height ) 
35 { 
36 return length * width * height; 
37 
38 } // end function boxVolume 
The default box volume is: 1
The volume of a box with length 10,
width 1 and height 1 is: 10
The volume of a box with length 10,
width 5 and height 1 is: 50
The volume of a box with length 10,
width 5 and height 2 is: 100
© 2004 Trần Minh Châu. FOTECH. VNU
75
Chương 3.
3.19 Toán tử phạm vi đơn
• Toán tử phạm vi đơn (::)
Unitary Scope Resolution Operator
– Dùng để truy nhập biến toàn cục nếu biến địa phương có 
cùng tên
– Không cần thiết nếu các tên biến khác nhau
– Cách dùng ::tên_biến
y = ::x + 3;
– Nên tránh dùng các tên giống nhau cho các biến địa phương 
và toàn cục
©2004 Trần Minh Châu.
FOTECH. VNU.
76
fig03_24.cpp
(1 of 2)
1 // Fig. 3.24: fig03_24.cpp
2 // Using the unary scope resolution operator.
3 #include 
4 
5 using std::cout;
6 using std::endl;
7 
8 #include 
9 
10 using std::setprecision;
11 
12 // define global constant PI 
13 const double PI = 3.14159265358979;
14 
15 int main()
16 {
17 // define local constant PI
18 const float PI = static_cast( ::PI );
19 
20 // display values of local and global PI constants
21 cout << setprecision( 20 )
22 << " Local float value of PI = " << PI 
23 << "\nGlobal double value of PI = " << ::PI << endl;
24 
25 return 0; // indicates successful termination
Truy nhập PI toàn cục với
::PI. 
Chuyển đổi PI toàn cục 
thành một giá trị float
cho PI địa phương. Ví dụ
này cho thấy sự khác nhau 
giữa float và double.
©2004 Trần Minh Châu.
FOTECH. VNU.
77
fig03_24.cpp
(2 of 2)
fig03_24.cpp
output (1 of 1)
26 
27 } // end main
Borland C++ command-line compiler output:
Local float value of PI = 3.141592741012573242
Global double value of PI = 3.141592653589790007
Microsoft Visual C++ compiler output:
Local float value of PI = 3.1415927410125732
Global double value of PI = 3.14159265358979
© 2004 Trần Minh Châu. FOTECH. VNU
78
Chương 3.
3.20 Chồng hàm
• Chồng hàm - Function overloading
– Các hàm có cùng tên nhưng khác nhau về tham số
– Nên thực hiện các nhiệm vụ tương tự
• ví dụ, hàm tính bình phương cho int và hàm tính bình 
phương cho float
int square( int x) {return x * x;}
float square(float x) { return x * x; }
• Các hàm chồng phân biệt nhau bởi chữ ký
– Dựa vào tên và kiểu tham số (xét cả thứ tự)
– Trình biên dịch đảm bảo gọi đúng hàm chồng được yêu cầu
©2004 Trần Minh Châu.
FOTECH. VNU.
79
fig03_25.cpp
(1 of 2)
1 // Fig. 3.25: fig03_25.cpp
2 // Using overloaded functions.
3 #include 
4 
5 using std::cout;
6 using std::endl;
7 
8 // function square for int values 
9 int square( int x ) 
10 { 
11 cout << "Called square with int argument: " << x << endl;
12 return x * x; 
13 
14 } // end int version of function square 
15 
16 // function square for double values 
17 double square( double y ) 
18 { 
19 cout << "Called square with double argument: " << y << endl;
20 return y * y; 
21 
22 } // end double version of function square 
23 
Các hàm chồng có cùng tên 
nhưng có tham số khác nhau
©2004 Trần Minh Châu.
FOTECH. VNU.
80
fig03_25.cpp
(2 of 2)
fig03_25.cpp
output (1 of 1)
24 int main()
25 {
26 int intResult = square( 7 ); // calls int version
27 double doubleResult = square( 7.5 ); // calls double version
28 
29 cout << "\nThe square of integer 7 is " << intResult
30 << "\nThe square of double 7.5 is " << doubleResult 
31 << endl; 
32 
33 return 0; // indicates successful termination
34 
35 } // end main
Called square with int argument: 7
Called square with double argument: 7.5
The square of integer 7 is 49
The square of double 7.5 is 56.25
Tùy theo đối số được truyền vào (int
hoặc double) để gọi hàm thích hợp.
© 2004 Trần Minh Châu. FOTECH. VNU
81
Chương 3.
3.21 Khuôn mẫu hàm - Function Template
• Cách ngắn gọn để tạo các hàm chồng
– Sinh các hàm riêng biệt cho các kiểu dữ liệu khác nhau
• Cú pháp
– Bắt đầu bằng từ khóa template
– các tham số kiểu hình thức trong cặp ngoặc 
• typename hoặc class (đồng nghĩa) đặt trước mỗi tham số 
kiểu
• là đại diện cho các kiểu cài sẵn (ví dụ int) hoặc các kiểu dữ 
liệu người dùng
• chỉ ra các kiểu dữ liệu cho đối số hàm, giá trị trả về, biến địa 
phương
– Hàm được định nghĩa như bình thường, ngoại trừ việc sử 
dụng các kiểu hình thức
© 2004 Trần Minh Châu. FOTECH. VNU
82
Chương 3.
3.21 Khuôn mẫu hàm
• Ví dụ
template // or template
T square( T value1 )
{
return value1 * value1;
}
– T là một kiểu hình thức, được dùng làm tham số kiểu
• hàm trên trả về giá trị thuộc cùng kiểu với tham số
– Tại lời gọi hàm, T được thay bằng kiểu dữ liệu thực
• Nếu là int, mọi T trở thành int
int x;
int y = square(x);
©2004 Trần Minh Châu.
FOTECH. VNU.
83
fig03_27.cpp
(1 of 3)
1 // Fig. 3.27: fig03_27.cpp
2 // Using a function template.
3 #include 
4 
5 using std::cout;
6 using std::cin;
7 using std::endl;
8 
9 // definition of function template maximum 
10 template // or template 
11 T maximum( T value1, T value2, T value3 ) 
12 { 
13 T max = value1; 
14 
15 if ( value2 > max ) 
16 max = value2; 
17 
18 if ( value3 > max ) 
19 max = value3; 
20 
21 return max; 
22 
23 } // end function template maximum 
24 
Tham số kiểu hình thức T là đại 
diện của kiểu dữ liệu được kiểm 
tra trong hàm maximum.
maximum mong đợi mọi 
tham số đều thuộc cùng một 
kiểu dữ liệu.
©2004 Trần Minh Châu.
FOTECH. VNU.
84
fig03_27.cpp
(2 of 3)
25 int main()
26 {
27 // demonstrate maximum with int values
28 int int1, int2, int3;
29 
30 cout << "Input three integer values: ";
31 cin >> int1 >> int2 >> int3;
32 
33 // invoke int version of maximum
34 cout << "The maximum integer value is: "
35 << maximum( int1, int2, int3 ); 
36 
37 // demonstrate maximum with double values
38 double double1, double2, double3;
39 
40 cout << "\n\nInput three double values: ";
41 cin >> double1 >> double2 >> double3;
42 
43 // invoke double version of maximum
44 cout << "The maximum double value is: "
45 << maximum( double1, double2, double3 );
46 
maximum được gọi với nhiều 
kiểu dữ liệu.
©2004 Trần Minh Châu.
FOTECH. VNU.
85
fig03_27.cpp
(3 of 3)
fig03_27.cpp
output (1 of 1)
47 // demonstrate maximum with char values
48 char char1, char2, char3;
49 
50 cout << "\n\nInput three characters: ";
51 cin >> char1 >> char2 >> char3;
52 
53 // invoke char version of maximum
54 cout << "The maximum character value is: "
55 << maximum( char1, char2, char3 ) 
56 << endl;
57 
58 return 0; // indicates successful termination
59 
60 } // end main
Input three integer values: 1 2 3
The maximum integer value is: 3
Input three double values: 3.3 2.2 1.1
The maximum double value is: 3.3
Input three characters: A C B
The maximum character value is: C

File đính kèm:

  • pdfNgôn ngữ lập trình C++ - Chương 3 Hàm.pdf