SLIDE1

Thursday, June 18, 2015

[oop c++] Thành viên tĩnh – static member

Trong C, static xuất hiện trước dữ liệu được khai báo trong một hàm nào đó thì giá trị của dữ liệu đó vẫn được lưu lại như một biến toàn cục.
Trong C++, nếu static xuất hiện trước một dữ liệu hoặc một phương thức của lớp thì giá trị của nó vẫn được lưu lại và có ý nghĩa cho đối tượng khác của cùng lớp này.
Các thành viên static có thể là public, private hoặc protected.

Đố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.

Ví dụ
class Rectangle
{
    private:
       int width;
       int length;
       static int count;
    public:
       void set(int w, int l);
       int area();
}

Ví dụ
Đếm số đối tượng MyClass:
class MyClass{
    public:
        MyClass();
        ~MyClass();
        void printCount();
    private:
        static int count;
};

int MyClass::count = 0;
MyClass::MyClass(){
    this -> count++;
}
MyClass::~MyClass(){
    this -> count--;
}
void MyClass::printCount(){
    cout << “There are currently ” << this  count << “ instance(s) of MyClass.\n”;
}
void main()
{
    MyClass* x = new MyClass;
    x -> printCount();
    MyClass* y = new MyClass;
     x -> printCount();
     y -> printCount();
    delete x;
     y -> printCount();
}


Phương thức static?

Đối với các phương thức static, ngoài ý nghĩa tương tự với dữ liệu, còn có sự khác biệt cơ bản đó là việc cho phép truy cập đến các phương thức static khi chưa khai báo đối tượng (thông qua tên lớp)
Các thành viên lớp tĩnh public có thể được truy cập thông qua bất kỳ đối tượng nào của lớp đó, hoặc chúng có thể được truy cập thông qua tên lớp sử dụng toán tử định phạm vi.
Các thành viên lớp tĩnh private và protected phải được truy cập thông qua các hàm thành viên public của lớp hoặc thông qua các friend của lớp.
Các thành viên lớp tĩnh tồn tại ngay cả khi đối tượng của lớp đó không tồn tại.
Để truy cập một thành viên lớp tĩnh public khi các đối tượng của lớp không tồn tại, đơn giản thêm vào đầu tên lớp và toán tử định phạm vi cho thành viên dữ liệu.
Để truy cập một thành viên lớp tĩnh private hoặc protected khi các đối tượng của lớp không tồn tại, một hàm thành viên public phải được cung cấp và hàm phải được gọi bởi thêm vào đầu tên của nó với tên lớp và toán tử định phạm vi.

Related Posts:

  • lớp class trong lập trình c++Một lớp bao gồm các thành phần dữ liệu (thuộc tính) và các phương thức (hàm thành phần). Lớp trong C++ thực chất là một kiểu dữ liệu do người sử dụng định nghĩa. Trong C++, dùng từ khóa class để chỉ điểm bắt đầu của một lớp s… Read More
  • CÁC MỞ RỘNG CỦA C++ CÁC MỞ RỘNG CỦA C++  II.1. Các từ khóa mới của C++   Để bổ sung các tính năng mới vào C, một số từ khóa (keyword) mới đã được đưa vào C++ ngoài các từ khóa có trong C. Các chương trình bằng C nào sử dụng các… Read More
  • tạo lập đối tượng trong c++*tạo lập đối tượng Khai báo và tạo đối tượng: <tên lớp>  <tên đối tượng>; Gọi hàm thành phần của lớp <tên đối tượng>.<tên hàm thành phần> (<danh sách các tham số nếu có>); <tên con trỏ đố… Read More
  • sự khác biệt giữa c và c++ Phạm vi và khai báo: Không giống như C, chúng ta có thể khai báo một biến tại một vị trí bất kỳ trong chương trình. Một biến chỉ có tầm tác dụng trong khối lệnh nó được khai báo. Do đó, C++ cung cấp toán tử định phạm vi (::)… Read More
  • tổng quan về lập trình hướng đối tượng OOP C++tổng quan về lập trình hướng đối tượng OOP C++ Mục tiêu của kỹ sư lập trình: Tạo ra sản phẩm tốt một cách có hiệu quả Nắm bắt được công nghệ Độ phức tạp và độ lớn ngày càng cao: Một số hệ Unix chứa khoảng 4M dòng lệnh MS Wind… Read More