1
Chương 4: Các kthut xây
dng hàm, sdng biến,
hng trong LTHDT
Hunh Quyết Thng
Cao Tun Dũng
Bmôn CNPM
TS H.Q. Thng - TS C.T. Dũng CNPM 2
Các thành phn tĩnh (static)
Vic khai báo dliuphm vi toàn cc
(global) có thkhông đảm bo an toàn hoc gây
xung đột
Để khc phcđiều này thì ta khai báo dliu
dưới dng Static
Tkhoá static:
Các dliu static chiếm các địa chc định ch
được to ra mt ln, nhng ln tham chiếu sau s
dng li các dliuđãđược to ra này
Mang tính cc bvkh năng sdng: đây
thcoi mt kthut qun định danh-
biến/hàm
2
TS H.Q. Thng - TS C.T. Dũng CNPM 3
Các thành phn tĩnh
Các biếnđịaphương khai báo cc btrong hàm:
Trong trường hp các biếnđịaphương không khai
báo biến static thì mi ln gi hàm chương trình
dch liđăng to ra biến mi
Khi chúng ta khai báo các biếnđịaphương các biến
static thì chương trình dch schkhi to duy nht
mt ln (ln giđầu tiên) biếnđịaphương này
thông qua con trstack nhng ln gi sau chi tham
chiếu ti biếnđã to ra này để sdng li chúng
không to ra biến mi
To mt ln/tham chiếu nhiu ln/lưu giá trca
ln tham chiếutrước
TS H.Q. Thng - TS C.T. Dũng CNPM 4
Biến địa phương static
Biếnđịaphương static:
void f()
{ static int x=0;
x++;
}
Ln gi 1: f()
Ln gi 2: f()
Biếnđịaphương không
static
void f()
{ int x=0;
x++;
}
Ln gi 1: f()
Ln gi 2: f()
0
10
0
3
TS H.Q. Thng - TS C.T. Dũng CNPM 5
Thành phn dliu tĩnh
Tương tự gia biến tĩnh và thành viên tĩnh
biến static x được khai báo trong hàm f(), mt bn
duy nht tn ti trong sut quá trình chy của chương
trình.
dùng chung cho tt ccác ln chy hàm f(),
bt khàm f() được gi bao nhiêu ln
Đối vi class, static ng để khai báo thành viên
dliu dùng chung cho mi thhin ca lp.
mt bn duy nht tn ti trong sut quá trình chy
của chương trình,
dùng chung cho tt ccác thhin ca lp,
bt klớp đó bao nhiêu thhin
TS H.Q. Thng - TS C.T. Dũng CNPM 6
Thành phn tĩnh: Chia sgia tt
cc đối tượng
valCount
val1 val2
value value
2
4
TS H.Q. Thng - TS C.T. Dũng CNPM 7
Thành phn dliu tĩnh
Định nghĩalưu trcho các thành phn d
liu tĩnh ca lp
Bt buc phiđịnh nghĩa các thành phn dliu tĩnh
vi tkhoá static
Khai báo đăng bnh để dành lưu trcác dliu
thành phn tĩnh
Ch định nghĩa mt ln
dnếu khai báo:
class A
{ static int i;
.............
};
int A::i =1;
TS H.Q. Thng - TS C.T. Dũng CNPM 8
Đếm s đối tượng ca mt lp
(C++)
class MyClass {
public:
MyClass(); // Constructor
~MyClass(); // Destructor
void printCount(); // Output current value of count
private:
static int count; // static member to store
// number of instances of MyClass
};
5
TS H.Q. Thng - TS C.T. Dũng CNPM 9
Thành phn dliu tĩnh
Định nghĩa và khi to
Thành viên tĩnh được lưu trữ đc lp vi các th
hin ca lp, do đó, các thành viên tĩnh phi
được định nghĩa:
int MyClass::count;
ta thường định nghĩa các thành viên tĩnh trong
file chứa định nghĩa các phương thức
nếu mun khi to giá trcho thành viên tĩnh ta
cho giá trkhi to tại định nghĩa
int MyClass::count = 0;
TS H.Q. Thng - TS C.T. Dũng CNPM 10
Thành phn tĩnh: My Class
int MyClass::count = 0;
MyClass::MyClass() {
this->count++; // Increment the static count
}
MyClass::~MyClass() {
this->count--; // Decrement the static count
}
void MyClass::printCount() {
cout << "There are currently " << this->count
<< " instance(s) of MyClass.\n";
}