Professional Documents
Culture Documents
C5-Classes and Objects PDF
C5-Classes and Objects PDF
Chng 1
K thut lp trnh
Phn III: Lp trnh hng i tng
Chng 5: Lp v i tng
0101010101010101100001
0101010101010101100001
StateController
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
start()
1100101100100010000010
1100101100100010000010
stop()
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
y = A*x + B*u;
1100101100100010000010
1100101100100010000010
x = C*x + d*u;
LQGController
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
start()
1010011000110010010010
stop()
1010011000110010010010
1100101100100010000010
1100101100100010000010
9/15/2006
Ni dung chng 5
5.1
5.2
5.3
5.4
5.5
Khi nim
T cu trc sang lp
Bin thnh vin
Hm thnh vin
Kim sot truy nhp
Chng 5: Lp v i tng
2005 - HMS
Chng 5: Lp v i tng
2005 - HMS
Mt i tng c...
Hnh vi
Hnh vi (behavior)
Cc php ton
c tnh phn ng
Cn cc (identity)
Ng ngha/trch nhim
(semantic/responsibilities)
Chng 5: Lp v i tng
Trng thi
t th
sc khe
Thuc tnh
Cn cc
Tn: Rex
ID: 007
mu lng: vng
ging: Berge
Ng ngha
Ch gi nh
2005 - HMS
Lp l g?
Mt lp l thc thi ca cc i tng c chung
Ng ngha
Thuc tnh
Quan h
Hnh vi
Chng 5: Lp v i tng
2005 - HMS
Chng 5: Lp v i tng
2005 - HMS
struct Time {
int hour; // gio
int min; // phut
int sec; // giay
};
void addHour(Time& t, int h) {
t.hour += h;
}
void addMin(Time& t, int m) {
t.min += m;
if (t.min > 59) {
t.hour += t.min/60;
t.min %= 60;
}
else if (t.min < 0) {
t.hour += (t.min/60 - 1);
t.min = (t.min % 60) + 60;
}
}
Chng 5: Lp v i tng
Mt s vn ca cu trc
Truy nhp d liu trc tip, khng c kim sot c th dn n
khng an ton
Time t1 = {1, 61, -3};
Time t2;
int h = t2.hour;
int m = 50;
t2.min = m + 15;
// ??!
// Uncertain values
// ??!
// ??!
Chng 5: Lp v i tng
2005 - HMS
Hm thnh vin
(member functions)
Chng 5: Lp v i tng
2005 - HMS
void addMin(int m) {
min += m;
if (min > 59) {
hour += min/60;
min %= 60;
}
else if (min < 0) {
hour += (min/60 - 1);
min = (min % 60) + 60;
}
}
void addSec(int s) {
sec += s;
if (sec > 59) {
addMin(sec/60);
sec %= 60;
}
else if (sec < 0) {
addMin(sec/60 - 1);
sec = (sec % 60) + 60;
}
}
void main()
{
Time t;
t.addHour(1);
t.addMin(60);
t.addMin(-5);
t.addSec(25);
t.hour = 1; // error
t.min = 65; // error
t.sec = -3; // error
t.setTime(1, 65, -3);
int h = t.getHour();
int m = t.getMin();
int s = t.getSec();
}
};
Chng 5: Lp v i tng
2005 - HMS
10
// error!
// error!
Chng 5: Lp v i tng
2005 - HMS
11
// controller parameters
// internal state
};
Chng 5: Lp v i tng
2005 - HMS
12
struct Time {
int hour, min, sec
};
void addHour(Time& t, int h) {
t.hour += h;
}
...
class Time {
int hour,min,sec;
public:
void addHour(int h) {
hour += h;
}
...
};
Gi hm vi bin cu trc
Gi hm thnh vin ca T
Time t;
...
addHour(t,5);
Time t;
...
t.addHour(5);
Chng 5: Lp v i tng
2005 - HMS
13
Chng 5: Lp v i tng
2005 - HMS
14
Chng 5: Lp v i tng
2005 - HMS
15
void main() {
Time t1,t2;
t1.addHour(5);
t2 = t1;
t2.addHour(5);
...
}
Chng 5: Lp v i tng
//
//
//
//
T ng gi hm to Time() cho t1 v t2
C th hiu nh l addHour(&t1,5);
OK
C th hiu nh l addHour(&t2,5);
2005 - HMS
16
Chng 5: Lp v i tng
2005 - HMS
17
#include "mytime.h"
void main() {
Time t;
//
t.addHour(5);
Time *pt = &t;
//
pt->addSec(70);
pt = new Time;
//
pt->addMin(25);
...
delete pt;
pt = new Time[5]; //
for (int i=0; i < 5;
pt[i].addSec(10);
...
delete [] pt;
}
Chng 5: Lp v i tng
2005 - HMS
18
Bi tp v nh
Chng 5: Lp v i tng
2005 - HMS
19