Upload
nguyenlegiaphung
View
230
Download
4
Embed Size (px)
Citation preview
CHNG 3. LP V I TNG
ThS. Trn Anh Dng
Ni dung
C php khai bo lp
nh ngha hm thnh phn ca lp
Khai bo v to lp i tng
Phm vi truy xut
Phng thc thit lp Constructor
Phng thc hy b Destructor
Phng thc Truy vn, Cp nht
Thnh vin tnh static member
14/09/2014 Lp trnh hng i tng 2
Lp trong C++
Mt lp bao gm cc thnh phn d liu (thuc
tnh) v cc phng thc (hm thnh phn).
Lp trong C++ thc cht l mt kiu d liu do
ngi s dng nh ngha.
Trong C++, dng t kha class ch im bt
u ca mt lp s c ci t.
14/09/2014 Lp trnh hng i tng 3
Lp i tng
Lp l mt m t tru tng ca nhm cc i
tng cng bn cht, ngc li mi mt i
tng l mt th hin c th cho nhng m t
tru tng .
14/09/2014 Lp trnh hng i tng 4
C php khai bo lp
class
{
//Thnh phn d liu
//Thnh phn x l
};
14/09/2014 Lp trnh hng i tng 5
C php khai bo lp
class {
private:
protected:
public:
}; 14/09/2014 Lp trnh hng i tng 6
C php khai bo lp
14/09/2014 Lp trnh hng i tng 7
class class_name
{
Access_Control_label:
members; (data & code)
Access_Control_label :
members; (data & code)
};
class Rectangle
{
private:
int width;
int length;
public:
void set(int w, int l);
int area();
};
Header
Cc thnh phn ca lp
Thuc tnh: Cc thuc tnh c khai bo
ging nh khai bo bin trong C
Phng thc: Cc phng thc c khai
bo ging nh khai bo hm trong C. C
hai cch nh ngha thi hnh ca mt
phng thc
nh ngha thi hnh trong lp
nh ngha thi hnh ngoi lp
14/09/2014 Lp trnh hng i tng 8
C ch to lp cc lp
Xc nh cc thuc tnh (d liu)
Nhng g m ta bit v i tng ging nh
mt struct
Xc nh cc phng thc (hnh vi)
Nhng g m i tng c th lm
Xc nh cc quyn truy xut
14/09/2014 Lp trnh hng i tng 9
nh ngha hm thnh phn
C php nh ngha cc hm thnh phn
bn ngoi khai bo lp:
:: ()
{
}
V d:
void point::display() {
//..
}
14/09/2014 Lp trnh hng i tng 10
nh ngha hm thnh phn
14/09/2014 Lp trnh hng i tng 11
class Rectangle{
private:
int width, length;
public:
void set (int w, int l);
int area() { return width*length; }
};
void Rectangle :: set (int w, int l)
{
width = w;
length = l;
}
inline
class name
member function name
scope operator
V d lp Time
14/09/2014 Lp trnh hng i tng 12
class Time {
public:
void Set (int hours , int minutes , int seconds);
void Increment ( );
void Write ( ) const;
Time (int initHrs, int initMins, int initSecs ); //constructor
Time ( ); //default constructor
private: int hrs; int mins; int secs;
} ;
V d lp Time
14/09/2014 Lp trnh hng i tng 13
Private data:
hrs
mins
secs
Set
Increment
Write
Time
Time
Time class
Khai bo v to lp i tng
Khai bo v to i tng:
;
Gi hm thnh phn ca lp
. ();
();
14/09/2014 Lp trnh hng i tng 14
Khai bo v to lp i tng
14/09/2014 Lp trnh hng i tng 15
class Rectangle
{
private:
int width;
int length;
public:
void set(int w, int l);
int area();
};
void main()
{
Rectangle r1;
r1.set(5, 8);
}
r1 is statically allocated
width
length
r1 width = 5
length = 8
Khai bo v to lp i tng
14/09/2014 Lp trnh hng i tng 16
class Rectangle
{
private:
int width;
int length;
public:
void set(int w, int l);
int area();
};
main()
{
Rectangle r1;
r1.set(5, 8);
Rectangle *r2; r2 = &r1;
r2->set(8,10);
}
r2 is a pointer to a Rectangle object
width
length
r1 width = 5
length = 8
5000
???
r2 6000
5000
width = 8
length = 10
//dot notation
//arrow notation
Khai bo v to lp i tng
14/09/2014 Lp trnh hng i tng 17
class Rectangle
{
private:
int width;
int length;
public:
void set(int w, int l);
int area();
};
main()
{
Rectangle *r3; r3 = new Rectangle();
r3->set(80,100);
delete r3; r3 = NULL;
}
r3 is dynamically allocated
???
r3 6000
NULL
//arrow notation
V d
Xy dng lp im (Point) trong hnh hc 2D
Thuc tnh
Tung
Honh
Thao tc (phng thc)
Khi to
Di chuyn
In ra mn hnh
14/09/2014 Lp trnh hng i tng 18
V d
14/09/2014 Lp trnh hng i tng 19
/*point.cpp*/
#include
using namespace std;
class point {
/*khai bo cc thnh phn d liu ring*/
private:
int x,y;
/*khai bo cc hm thnh phn cng cng*/
public:
void init(int ox, int oy);
void move(int dx, int dy);
void display();
};
V d
14/09/2014 Lp trnh hng i tng 20
void point::init(int ox, int oy) {
cout
V d
14/09/2014 Lp trnh hng i tng 21
void main()
{
point p;
p.init(2,4); /*gi hm thnh phn t i tng*/
p.display();
p.move(1,2);
p.display();
}
Ham thanh phan init
Ham thanh phan display
Toa do: 2 4
Ham thanh phan move
Ham thanh phan display
Toa do: 3 6
Phm vi truy xut
Trong nh ngha ca lp ta c th xc nh kh
nng truy xut thnh phn ca mt lp no t
bn ngoi phm vi lp.
private, protected v public l cc t kha xc
nh phm vi truy xut
Mi thnh phn c lit k trong phn public
u c th truy xut trong bt k hm no.
Nhng thnh phn c lit k trong phn
private ch c truy xut bn trong phm vi lp.
14/09/2014 Lp trnh hng i tng 22
Phm vi truy xut
Trong lp c th c nhiu nhn private v public
Mi nhn ny c phm vi nh hng cho n khi
gp mt nhn k tip hoc ht khai bo lp.
Nhn private u tin c th b qua v C++ ngm
hiu rng cc thnh phn trc nhn public u
tin l private.
14/09/2014 Lp trnh hng i tng 23
Phm vi truy xut V d
14/09/2014 Lp trnh hng i tng 24
class TamGiac{
private:
float a,b,c;/* di ba cnh*/
public:
void Nhap();/*nhp vo di ba cnh*/
void In();/*in ra cc thng tin lin quan n tam gic*/
private:
int Loaitg();//cho bit kiu ca tam gic: 1-d,2-vc,3-c,4-v,5-t
float DienTich();/*tnh din tch ca tam gic*/
};
Phm vi truy xut V d
14/09/2014 Lp trnh hng i tng 25
class TamGiac{
private:
float a,b,c;/* di ba cnh*/
int Loaitg();//cho bit kiu ca tam gic: 1-d,2-vc,3-c,4-
v,5-t
float DienTich();/*tnh din tch ca tam gic*/
public:
void Nhap();/*nhp vo di ba cnh*/
void In();/*in ra cc thng tin lin quan n tam gic*/
};
Tham s hm thnh phn
Hm thnh phn c quyn truy nhp n cc
thnh phn private ca i tng gi n
14/09/2014 Lp trnh hng i tng 26
void point::init (int xx, int yy){
x = xx;
y = yy; //x, y la thanh phan cua lop point
}
?
Tham s hm thnh phn
14/09/2014 Lp trnh hng i tng 27
int Trung (point pt){
return (x==pt.x && y==pt.y);
}
int Trung (point *pt){
return (x==ptx && y==pty);
}
int Trung (point &pt) {
return (x==pt.x && y==pt.y);
}
? Hm thnh phn c quyn truy cp n tt c
cc thnh phn private ca cc i tng, tham
chiu i tng hay con tr i tng c cng
kiu lp khi c dng l tham s hnh thc ca
n.
Con tr this
T kha this trong nh ngha ca cc hm thnh
phn lp dng xc nh a ch ca i tng
dng lm tham s ngm nh cho hm thnh
phn.
Con tr this tham chiu n i tng ang gi
hm thnh phn.
V d:
int Trung(point pt){
return (this x == pt.x && this y == pt.y);
} 14/09/2014 Lp trnh hng i tng 28
Php gn i tng
L vic sao chp gi tr cc thnh phn d
liu t i tng a sang i tng b tng
ng tng i mt
V d:
point a, b;
a.init(5,2);
b = a;
14/09/2014 Lp trnh hng i tng 29
2 y
5
b a
x 5
2
x
y
Phng thc thip lp
Trong hu ht cc thut gii, gii quyt
mt vn thng phi thc hin cc
cng vic:
Khi to gi tr cho bin, cp pht vng b nh
ca bin con tr, m tp tin truy cp,
Hoc khi kt thc, chng ta phi thc hin qu
trnh ngc li nh: Thu hi vng b nh
cp pht, ng tp tin,
14/09/2014 Lp trnh hng i tng 30
Phng thc thip lp
Cc ngn ng OOP c cc phng thc
thc hin cng vic ny mt cch t
ng gi l phng thc thit lp v
phng thc hy b.
14/09/2014 Lp trnh hng i tng 31
Phng thc thip lp
Phng thc thit lp hay cn gi l constructor,
l mt loi phng thc c bit dng khi
to th hin ca lp.
Bt k mt i tng no c khai bo u
phi s dng mt hm thit lp khi to cc
gi tr thnh phn ca i tng.
Hm thit lp c khai bo ging nh mt
phng thc vi tn phng thc trng vi tn
lp v khng c gi tr tr v (k c void).
Constructor phi c thuc tnh public
14/09/2014 Lp trnh hng i tng 32
Phng thc thip lp
Constructor c th c khai bo chng nh cc
hm C++ thng thng khc hay khng?
Constructor c th c khai bo vi cc tham
s c gi tr ngm nh hay khng?
14/09/2014 Lp trnh hng i tng 33
V d
14/09/2014 Lp trnh hng i tng 34
class point{
/*Khai bo cc thnh phn d liu*/
int x, y;
public:
point() { x = 0; y = 0; } /*Hm thit lp mc nh*/
point(int ox, int oy) { x = ox; y = oy; }/*Hm thit lp*/
void move (int dx, int dy);
void display();
};
point a(5,2);
point b;
point c(3); ?
V d
14/09/2014 Lp trnh hng i tng 35
class point{
/*Khai bo cc thnh phn d liu*/
int x, y;
public:
point() { x = 0; y = 0; } /*Hm thit lp mc nh*/
point(int ox, int oy = 1){ x = ox; y = oy;}/*Hm thit lp*/
void move (int dx, int dy);
void display();
};
point a(5,2);
point b;
point c(3);
Phng thc thip lp mc nh
Constructor mc nh (default constructor) l
constructor c gi khi th hin c khai bo
m khng c i s no c cung cp
MyClass x;
MyClass* p = new MyClass;
Ngc li, nu tham s c cung cp ti khai
bo th hin, trnh bin dch s gi constructor
khc (overload)
MyClass x(5);
MyClass* p = new MyClass(5);
14/09/2014 Lp trnh hng i tng 36
Phng thc thip lp mc nh
i vi constructor mc nh, nu ta khng cung
cp bt k constructor no, C++ s t sinh
constructor mc nh l mt phng thc rng.
Tuy nhin, nu ta khng nh ngha constructor
mc nh nhng li c cc constructor khc, trnh
bin dch s bo li khng tm thy constructor
mc nh nu ta khng cung cp tham s khi to
th hin.
14/09/2014 Lp trnh hng i tng 37
V d
14/09/2014 Lp trnh hng i tng 38
class point{
/*Khai bo cc thnh phn d liu*/
int x, y;
public:
point(int ox, int oy = 1){ x = ox; y = oy;}
void move (int dx, int dy);
void display();
};
point a(5,2);
point b;
point c(3);
Phng thc thip lp sao chp
Chng ta c th to i tng mi ging i
tng c mt s c im, khng phi hon ton
nh php gn bnh thng, hnh thc ging
nhau c nh ngha theo quan nim ca
ngi lp trnh. lm c vn ny, trong
cc ngn ng OOP cho php ta xy dng
phng thc thit lp sao chp.
y l phng thc thit lp c tham s l tham
chiu n i tng thuc chnh lp ny.
14/09/2014 Lp trnh hng i tng 39
Phng thc thip lp mc nh
14/09/2014 Lp trnh hng i tng 40
Trong phng thc thit lp sao chp c th ta
ch s dng mt s thnh phn no ca i
tng ta tham chiu gn ging nhau
Phng thc hy b
Phng thc hy b hay cn gi l destructor,
c gi ngay trc khi mt i tng b thu hi.
Destructor thng c dng thc hin vic
dn dp cn thit trc khi mt i tng b hy.
14/09/2014 Lp trnh hng i tng 41
Phng thc hy b
Mt lp ch c duy nht mt Destructor
C php:
Phng thc Destructor c tn trng tn vi
tn lp v c du ~ t trc
Khng c gi tr tr v
c t ng gi thc hin khi i tng ht
phm vi s dng.
Destructor phi c thuc tnh public
14/09/2014 Lp trnh hng i tng 42
V d
14/09/2014 Lp trnh hng i tng 43
class vector{
int n; //s chiu
float *v; //vng nh ta
public:
vector(); //Hm thit lp khng tham s
vector(int size); //Hm thit lp mt tham s
vector(int size, float *a);
~vector(); //Hm hy b, lun lun khng c tham s
void display();
};
Thao tc vi d liu private
Khi mun truy xut d liu private t cc i
tng th phi lm th no?
Khi mun cp nht d liu private t cc i
tng th phi lm th no?
14/09/2014 Lp trnh hng i tng 44
Phng thc Truy vn
C nhiu loi cu hi truy vn c th:
Truy vn n gin (gi tr ca x l bao nhiu?)
Truy vn iu kin (thnh vin x c > 10 khng?)
Truy vn dn xut (tng gi tr ca cc thnh vin x v
y l bao nhiu?)
c im quan trng ca phng thc truy vn
l n khng nn thay i trng thi hin ti ca
i tng
14/09/2014 Lp trnh hng i tng 45
Phng thc Truy vn
i vi cc truy vn n gin, quy c t tn
phng thc nh sau: Tin t get, tip theo l
tn ca thnh vin cn truy vn
int getX();
int getSize();
Cc loi truy vn khc nn c tn c tnh m t
Truy vn iu kin nn c tin t is
14/09/2014 Lp trnh hng i tng 46
Phng thc Cp nht
Thng thay i trng thi ca i tng
bng cch sa i mt hoc nhiu thnh vin d
liu ca i tng .
Dng n gin nht l gn mt gi tr no cho
mt thnh vin d liu.
i vi dng cp nht n gin, quy c t tn
nh sau: Dng tin t set km theo tn thnh
vin cn sa
int setX(int); 14/09/2014 Lp trnh hng i tng 47
Truy vn v Cp nht
Nu phng thc get/set ch c nhim v cho ta
c/ghi gi tr cho cc thnh vin d liu Quy
nh cc thnh vin private c ch li g?
Ngoi vic bo v cc nguyn tc ng gi, ta cn
kim tra xem gi tr mi cho thnh vin d liu c hp
l hay khng.
S dng phng thc truy vn cho php ta thc hin
vic kim tra trc khi thc s thay i gi tr ca
thnh vin.
Ch cho php cc d liu c th truy vn hay thay i
mi c truy cp n.
14/09/2014 Lp trnh hng i tng 48
V d
14/09/2014 Lp trnh hng i tng 49
int Student::setGPA (double newGPA){
if ((newGPA >= 0.0) && (newGPA gpa = newGPA;
return 0; // Return 0 to indicate success
}
else
{
return -1; // Return -1 to indicate failure
}
}
Thnh vin tnh static member
Trong C, static xut hin trc d liu c khai
bo trong mt hm no th gi tr ca d liu
vn c lu li nh mt bin ton cc.
Trong C++, nu static xut hin trc mt d liu
hoc mt phng thc ca lp th gi tr ca n
vn c lu li v c ngha cho i tng
khc ca cng lp ny.
Cc thnh vin static c th l public, private
hoc protected.
14/09/2014 Lp trnh hng i tng 50
Thnh vin tnh static member
i vi class, static dng khai bo thnh vin
d liu dng chung cho mi th hin ca lp:
Mt bn duy nht tn ti trong sut qu trnh
chy ca chng trnh.
Dng chung cho tt c cc th hin ca lp.
Bt k lp c bao nhiu th hin.
14/09/2014 Lp trnh hng i tng 51
V d
14/09/2014 Lp trnh hng i tng 52
class Rectangle
{
private:
int width;
int length;
static int count;
public:
void set(int w, int l);
int area();
}
Rectangle r1; Rectangle r2; Rectangle r3;
width
length
width
length
width
length
r1
r3
r2
count
V d
m s i tng MyClass:
14/09/2014 Lp trnh hng i tng 53
class MyClass{
public:
MyClass();
~MyClass();
void printCount();
private:
static int count;
};
V d
14/09/2014 Lp trnh hng i tng 54
int MyClass::count = 0;
MyClass::MyClass(){
this count++;
}
MyClass::~MyClass(){
this count--;
}
void MyClass::printCount(){
cout
V d
14/09/2014 Lp trnh hng i tng 55
void main()
{
MyClass* x = new MyClass;
x printCount();
MyClass* y = new MyClass;
x printCount();
y printCount();
delete x;
y printCount();
}
Thnh vin tnh static member
Phng thc static?
i vi cc phng thc static, ngoi ngha
tng t vi d liu, cn c s khc bit c
bn l vic cho php truy cp n cc
phng thc static khi cha khai bo i
tng (thng qua tn lp)
14/09/2014 Lp trnh hng i tng 56
Thnh vin tnh static member
Cc thnh vin lp tnh public c th c truy
cp thng qua bt k i tng no ca lp ,
hoc chng c th c truy cp thng qua tn
lp s dng ton t nh phm vi.
Cc thnh vin lp tnh private v protected phi
c truy cp thng qua cc hm thnh vin
public ca lp hoc thng qua cc friend ca lp.
Cc thnh vin lp tnh tn ti ngay c khi i
tng ca lp khng tn ti.
14/09/2014 Lp trnh hng i tng 57
Thnh vin tnh static member
truy cp mt thnh vin lp tnh public khi cc
i tng ca lp khng tn ti, n gin thm
vo u tn lp v ton t nh phm vi cho
thnh vin d liu.
truy cp mt thnh vin lp tnh private hoc
protected khi cc i tng ca lp khng tn ti,
mt hm thnh vin public phi c cung cp
v hm phi c gi bi thm vo u tn ca
n vi tn lp v ton t nh phm vi.
14/09/2014 Lp trnh hng i tng 58
V d v i tng ton cc
Xt on chng trnh sau:
#include
void main(){
cout
V d v i tng ton cc
14/09/2014 Lp trnh hng i tng 60
#include
class Dummy{
public:
Dummy(){cout
Bi tp
Vit chng trnh cho php nhp, xut, khi to
1 hc sinh. Thng tin cn quan tm v 1 hc sinh:
M hc sinh (8 k t), h tn hc sinh (30 k t),
im ton (int), im vn (int).
Danh t: Hc sinh cu trc HS
ng t:
Nhp mt hs Hm Nhap()
Xut mt hs Hm Xuat();
14/09/2014 Lp trnh hng i tng 61
Q & A