Professional Documents
Culture Documents
Overloaded functions
• Ví dụ 2: tính giá trị tuyệt đối của biến sử dụng hàm abs();
#include<cmath>
cout<<"Gia tri tuyet doi cua so nguyen int "<<abs(-10)<<endl;
cout<<"Gia tri tuyet doi cua so thuc float "<<abs(-10.3)<<endl;
Mở đầu
• Ví dụ 3: Xét danh sách phòng thi, thí sinh trùng tên nhau thì
phải so sánh với trường khác để phân biệt
void print(int i) {
cout << "\tIn so nguyen (int): " << i << endl;
}
void print(double f) {
cout << "\tIn so thuc (float): " << f << endl;
}
void print(char* c) {
cout << "\tIn xau ky tu (character): " << c << endl;
}
Nhập xâu ký tự
• string str;
• char ch[80];
Ví dụ 2: Hàm trị tuyệt đối của số int và float
// overloading functions
int operate (int a, int b) // int operate (int a, double b)
{ return (a*b); }
double operate (double a, double b)
{ return (a/b); }
int main () {
int x = 5,y = 2;
double n = 5.0, m = 2.0;
cout << operate (x,y) << '\n';
cout << operate (n,m) << '\n';
return 0; }
Ví dụ 4. Nạp chồng và các tham số mặc định
#include <iostream>
using namespace std;
int fun(int = 0, int = 0);
int main(){
cout<< fun();
cout<< fun(5);
cout<< fun(3,5);
}
int fun(int x, int y) {
return (x + y);
}
Vấn đề tiếp
#include<iostream>
using namespace std;
return 0;
}
Hàm giống nhau
• Cú pháp
namespace ten_thu_nhat{
// Phần khai báo các code
namespace ten_thu_hai{
// Phần khai báo các code
}
}
• Truy cập vào thành viên đầu tiên: using namespace ten_thu_nhat;
• Truy cập thành viên thứ 2:
• using namespace ten_thu_nhat::ten_ thu_hai;
Hàm mẫu
• Đối với các trường hợp này, C ++ có khả năng định nghĩa
các hàm với các kiểu generic, gọi là các mẫu hàm.
• Định nghĩa một mẫu hàm theo cú pháp giống như một
hàm thông thường, ngoại trừ nó được đặt trước bởi từ
khóa template và một loạt các tham số mẫu kèm theo
khung góc <>:
• template <template-parameters> function-declaration
• Ví dụ
template <class SomeType>
SomeType sum (SomeType a, SomeType b){ // int sum(int a, int b)
return a+b;
}
Được gọi trong hàm main(): x = sum<int>(10,20);
template <class T>
T sum (T a, T b) {
T result; // biến trung gian
result = a + b;
return result;
}
int main () {
int i = 5, j = 6, k;
double f = 2.0, g = 0.5, h;
k = sum<int>(i,j);
h = sum<double>(f,g);
cout << k << '\n';
cout << h << '\n';
return 0;
}
Ví dụ 2
#include <iostream>
using namespace std;
template <class T, class U>
bool are_equal (T a, U b) {
return (a==b);
}
int main () {
if (are_equal(10,10.0)) // are_equal<int, float>(10,10.0)
cout << "x and y are equal\n";
else cout << "x and y are not equal\n"; return 0;
} OUTPUT: x and y are equal
Ví dụ 3: Các đối số mẫu không phải là kiểu (tức là hàm nhân với
một số nào đó)
template <class T, int N>
T fixed_multiply (T val) {
return val * N; }
int main() {
cout << fixed_multiply<int,2>(10) << '\n';
} OUTPUT: 20
template <class T> // so sánh 2 cách thiết lập template
T fixed_multiply (T val, int N) {
return val * N;
}
int main() {
cout << fixed_multiply<int>(10,2) << '\n'; // có thể gọi theo cách 1
cout << fixed_multiply(10,2) << '\n'; // có thể gọi theo cách 2
}
// Còn như <class T, int N> thì chỉ có 1 cách gọi duy nhất
Trao đổi - Mở rộng
#include<iostream>
using namespace std;
template <class T> // 1. Vị trí template - phía trên main().
T sum_ab(T a, T b) {
return (a+b);
}
int main() {
int a = 5, b = 10;
int c1, c2;
c1 = sum_ab(a,b); //2. cách 1 gọi hàm
cout<<"Gia tri cua tong (a+b) = "<<c1<<endl;
c2 = sum_ab<int>(a,b); // cách 2 gọi hàm
cout<<"Gia tri cua tong (a+b) = "<<c2<<endl;
} tv1.cpp
Ví dụ in các phần tử của mảng
return max ;
}
int main()
{
int c;
c = maximum(3,5,7); // nội suy biết kiểu int
cout<<"Gia tri lon nhat "<<c<<endl;
system("pause");
return 0;
} tv1_max.cpp
Mở rộng
pint = absolute;
pfloat = absolute;
cout<<"Dia chi cua ham nap chong \n\n";
cout<<&pint<<" "<<&pfloat<<endl<<"\n";
}