Tải bản đầy đủ (.pdf) (15 trang)

Các đặc điểm C++ áp dụng cho class

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (212.98 KB, 15 trang )

Các đặc điểm C++
áp dụng cho class
Lập trình hướng đối tượng
@ 2004 Trần Minh Châu. FOTECH. VNU
2
Tài liệu đọc
n Eckel, Bruce. Thinking in C++, 2
nd
Ed. Vol 1.
¨ Chapter 8: Constants
n Start at p. 352 (Classes)
¨ Chapter 10: Name Control
n p. 423 (Static Members in C++) to p. 442 (Alternate Linkage
Specifications)
n Dietel. C++ How to Program, 4
th
Ed.
¨ Chapter 7: Class II
n 7.2, 7.3, 7.6, 7.7, 7.8
@ 2004 Trần Minh Châu. FOTECH. VNU
3
Tổng quan
n Các đặc điểm cơ bản của C++ như const, static, ...áp
dụng cho các lớp như thế nào?
¨ hằng thành viên–const member
¨ thành viên tĩnh–static member
¨ hằng thành viên tĩnh–const static member
¨ hằng hàm/phương thức–const method
¨ hàm/phương thức tĩnh–static method
¨ làm việc với các đối tượng
@ 2004 Trần Minh Châu. FOTECH. VNU


4
Hằng thành viên–const member
n Ta đãbiết về từ khoá const dùng với các biến thông thường
const int x = 50;
n Từ khoá const đối với các thành viên dữ liệu như thế nào?
n Khi một thành viên dữ liệu được khai báo là const, thành viên đó
sẽ giữ nguyên giátrị trong suốt thời gian sống của đối tượng chủ.
class MyClass {
public:
MyClass(int x = 5); // Constructor w/default argument
private:
const int foo; // Declares foo a constant member
};
@ 2004 Trần Minh Châu. FOTECH. VNU
5
Hằng thành viên–const member
khởi tạo hằng thành viênkhi nào?
n Bên trong khai báo class? Quásớm, ta chưa có đối
tượng nào, không cóchỗđể lưu giátrị
n Gán trị trong thân hàm constructor? Quámuộn, không
đảm bảo hằng không được truy nhập trước khi nó được
gán.
n Giải pháp: danh sách khởi tạo tại constructor–member
initialization list
@ 2004 Trần Minh Châu. FOTECH. VNU
6
Hằng thành viên–const member
n danh sách khởi tạo của constructor nằm tại định nghĩa của
constructor, chứa một tập các "lời gọi constructor" màsẽđược thực
hiện trước khi thực thi phần thân của constructor đó.

¨ khi dùng cho các hằng thành viên, danh sách khởi tạo đảm bảo chúng
được khởi tạo trước khi được truy nhập
¨ chi tiết thêm tại phần thừa kế.
class MyClass {
public:
MyClass(int x = 5); // Constructor w/default argument
private:
const int foo; // Declares foo a constant member
};
...
MyClass::MyClass(int x) : foo(x)
{ // constructor body }
danh sách khởi tạo của
constructor
dấu hai chấm tách giữa
danh sách tham số và
danh sách khởi tạo
@ 2004 Trần Minh Châu. FOTECH. VNU
7
Hằng thành viên–const member
n Danh sách khởi tạo–Vídụ
class MyClass {
public:
MyClass(int x = 5); // Constructor w/default argument
private:
const int foo; // Declares foo a constant member
const int bar;
};
...
MyClass::MyClass(int x, int y) : foo(x), bar(y)

{ // constructor body }
danh sách khởi tạo của constructor,
khởi tạo hằng foo với giátrị của x ,
khởi tạo hằng bar với giátrị của y.
dấu phảy tách giữa các
thành phần của danh sách
khởi tạo
@ 2004 Trần Minh Châu. FOTECH. VNU
8
Hằng thành viên–const member
n Điều quan trọng cần nhớ: hằng thành viên của một đối
tượng không thay đổi giátrị trong suốt thời gian sống
của đối tượng đó.
¨ Các hằng của các đối tượng khác nhau (thuộc cùng một lớp)
không cóquan hệ gìvới nhau
¨ Vídụ, một đối tượng thuộc lớp MyClass cóhằng foo với giátrị
5,trong khi đó, một đối tượng khác cùng thuộc lớp MyClass lại
cóhằng foo cógiátrị 10.
n Tiếp theo, ta sẽ tìm hiểu cách định nghĩa các thành viên
dữ liệu được dùng chung bởi tất cả các đối tượng thuộc
cùng một lớp
@ 2004 Trần Minh Châu. FOTECH. VNU
9
Thành viên tĩnh–static member
void myCounter()
{
static int count = 0; // Static variable
count++;
cout <<“This function has been invoked“
<< count <<“time(s). << endl;

}
int main()
{
for (int i = 1; i <= 3; i++)
{
myCounter();
}
}
This function has been invoked 1 time(s).
This function has been invoked 2 time(s).
This function has been invoked 3 time(s).
n Đối với biến thông thường, static dùng để khai báo các biến tĩnh
tồn tại trong suốt quátrình chạy của chương trình.
@ 2004 Trần Minh Châu. FOTECH. VNU
10
Thành viên tĩnh–static member
Tương tự giữa biến tĩnh vàthành viên tĩnh
n biến staticxđược khai báo trong hàm f(),
¨ một bản duy nhất tồn tại trong suốt quátrình chạy của chương trình.
¨ dùng chung cho tất cả các lần chạy hàm f(),
¨ bất kể hàm f() được gọi bao nhiêu lần
n Đối với class, static dùng để khai báo thành viên dữ liệu dùng
chung cho mọi thể hiện của lớp.
¨ một bản duy nhất tồn tại trong suốt quátrình chạy của chương trình,
¨ dùng chung cho tất cả các thể hiện của lớp,
¨ bất kể lớp đócóbao nhiêu thể hiện
@ 2004 Trần Minh Châu. FOTECH. VNU
11
n Đếm sốđối tượng MyClass
¨ khai báo lớp MyClass

Thành viên tĩnh-Vídụ
class MyClass {
public:
MyClass(); // Constructor
~MyClass(); // Destructor
void printCount(); // Output current value of count
private:
static int count; // static memberto store
// number of instances of MyClass
};
thành viên tĩnh count
@ 2004 Trần Minh Châu. FOTECH. VNU
12
¨cài đặt các phương thức
Thành viên tĩnh-Vídụ
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";
}
Khởi tạo biến đếm bằng 0, vì
ban đầu không có đối tượng nào

×