Professional Documents
Culture Documents
B03 Cpp4class
B03 Cpp4class
class MyClass {
public:
MyClass(int x = 5); // Constructor w/default argument
private:
const int foo; // Declares foo a constant member
};
{ // constructor body }
class MyClass {
public: dấu phảy tách giữa các
MyClass(int x = 5); // Constructor w/default argument
thành phần của danh sách
private: khởi tạo
const int foo; // Declares foo a constant member
const int bar;
};
...
MyClass::MyClass(int x, int y) : foo(x), bar(y)
{ // constructor body }
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++) This function has been invoked 1 time(s).
{ This function has been invoked 2 time(s).
myCounter(); This function has been invoked 3 time(s).
}
}
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
private:
static int count; // static member to store
// number of instances of MyClass
};
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";
}
n thành viên tĩnh được lưu trữ độc lập với các thể hiện của lớp, do đó,
các thành viên tĩnh phải được định nghĩa
int MyClass::count;
n 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 nếu muốn khởi tạo giá trị cho thành viên tĩnh ta cho giá trị khởi tạo
tại định nghĩa
int MyClass::count = 0;
delete x;
y->PrintCount();
}
n Cú pháp này cũng được dùng cho phương thức với hiệu
quả tương tự
class MyClass { x được truyền bằng hằng tham chiếu
x sẽ không bị hàm/phương thức sửa đổi
//...
MyMethod(const int& x);
///...
};
n dùng tên lớp kèm theo toán tử phạm vi (::) để gọi phương thức tĩnh
MyClass::printCount();
n hoặc có thể dùng đối tượng sẵn có để gọi phương thức tĩnh
MyClass x;
x.printCount();
n Ví dụ int main()
{
MyClass::printCount();
MyClass* x = new MyClass;
x->printCount();
delete x;
y->printCount();
}
MyClass* foo;
n Khai báo con trỏ tới đối foo = new MyClass();
tượng, và dùng con trỏ để MyClass* foo2;
foo2 = new MyClass(5, 6);
cấp phát bộ nhớ động ...
delete foo;
...rồi thu hồi chúng delete foo2;
MyClass foo;
n Khai báo tham chiếu tới MyClass& r_foo = foo;
đối tượng MyClass foo2;
MyClass& r_foo2 = foo2;
MyClass foo[10];
n Tạo mảng các đối tượng
...
MyClass* foo2[10];
hoặc mảng các con trỏ for (int i = 0; i < 10; i++) {
tới đối tượng foo2[i] = new MyClass(i, i + 1);
}
foo[7].PrintCount();
n Truy nhập các đối tượng trong
mảng như vẫn làm đối với các for (int i = 0; i < 10; i++)
{
phần tử mảng thông thường foo[i].PrintCount();
}
MyClass::MyClass {
n Để tránh rò rỉ bộ nhớ, bất cứ this->y = new MyClass2();
phần bộ nhớ nào được cấp phát }