Professional Documents
Culture Documents
KTLT C23 HamNangCao Phan2.Ppt (By Bsquochoai - Ga)
KTLT C23 HamNangCao Phan2.Ppt (By Bsquochoai - Ga)
K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn
HM NNG CAO
(PHN 2)
1
&
VC
BB
Ni dung
1 Tham s
2 Khun mu hm
3 Np chng hm
4 Np chng ton t
Khai bo
<kiu tr v> <tn hm>(<dsts bit trc>, )
{
}
ngha
Hm c s lng tham s khng bit trc v
thng cng kiu (khng c l char,
unsigned char, float).
Phi c t nht 1 tham s bit trc.
Tham s t cui cng.
Hm nng cao (phn 2)
3
&
VC
BB
Tham s
V d
void XuatTong1(char *msg, int n, )
{
// Cc lnh y
}
int Tong(int a, )
{
// Cc lnh y
}
Hm nng cao (phn 2)
4
&
VC
BB
Truy xut danh sch tham s
V d
#include <stdarg.h>
void XuatTong1(char *msg, int n, )
{
va_list ap;
va_start(ap, n); // ts c nh cui cng
int value, s = 0;
for (int i=0; i<n; i++)
{
value = va_arg(ap, int);
s = s + value;
}
va_end(ap);
printf(%s %d, msg, s);
}
Hm nng cao (phn 2)
6
&
VC
BB
Tham s
V d
#include <stdarg.h>
void XuatTong2(char *msg, )
{
va_list ap;
va_start(ap, msg); // ts c nh cui
int value, s = 0;
while ((value = va_arg(ap, int)) != 0)
{
s = s + value;
}
va_end(ap);
printf(%s %d, msg, s);
}
V d
#include <stdarg.h>
int Tong(int a, )
{
va_list ap;
va_start(ap, n); // ts c nh cui cng
int value, s = a;
while ((value = va_arg(ap, int)) != 0)
{
s = s + value;
}
va_end(ap);
return s;
}
Khi nim
Vit mt hm duy nht nhng c th s dng
cho nhiu kiu d liu khc nhau.
C php
tempate <ds mu tham s> <khai bo hm>
V d
template <class T> <khai bo hm>
hoc
V d
template <class T>
T min(T a, T b)
{
if (a < b)
return a;
return b;
}
void main()
{
int a = 2912, b = 1706;
int m = min<int>(a, b);
printf(So nho nhat la %d, m);
}
Hm nng cao (phn 2)
11
&
VC
BB
Khun mu hm
Nhu cu
Thc hin mt cng vic vi nhiu cch khc
nhau. Nu cc hm khc tn s kh qun l.
Khi nim np chng/qu ti (overload) hm
Hm cng tn nhng c tham s u vo
hoc u ra khc nhau.
Nguyn mu hm (prototype) khi b tn tham
s phi khc nhau.
Cho php ngi dng chn phng php
thun li nht thc hin cng vic.
Hm nng cao (phn 2)
13
&
VC
BB
Np chng hm
V d
Nhp mng theo nhiu cch
void Nhap(int a[], int &n)
{
// Nhp n ri nhp mng a
}
void Nhap(int a[], int n)
{
// Nhp mng a theo n truyn vo
}
int Nhap(int a[])
{
// Nhp n, nhp mng a ri tr n v
}
Hm nng cao (phn 2)
14
&
VC
BB
Np chng hm
V d
Gn gi tr cho PHANSO
void Gan(PHANSO &ps, int tu, int mau)
{
ps.tu = tu;
ps.mau = mau;
}
Ch
Cc hm sau y l nh nhau
int Tong(int a, int b) // int Tong(int, int)
{
return a + b;
}
int Tong(int b, int a) // int Tong(int, int)
{
return a + b;
}
int Tong(int x, int y) // int Tong(int, int)
{
return x + y;
}
Hm nng cao (phn 2)
16
&
VC
BB
Np chng hm
void main()
{
float x = 29.12;
double y = 17.06;
printf(%.2f\n, f(x)); // float
printf(%.2lf\n, f(y));// double
printf(%.2f, f(10)); // ???
}
Khi nim
Ging nh qu ti hm.
C mt s quy nh khc v tham s.
To thm hm ton t (operator function)
np chng ton t.
<kiu tr v> operator#(<ds tham s>)
{
// Cc thao tc cn thc hin
}
Ton t mt ngi
Ton t tng ++ (trc)
typedef struct {int tu, mau;} PHANSO;
Ton t mt ngi
Ton t tng ++ (sau)
typedef struct {int tu, mau;} PHANSO;
Ton t mt ngi
Ton t o du
typedef struct {int tu, mau;} PHANSO;