30/09/2018, 22:12
Static member của class trong C++
Các anh có thể “thông não” giùm em được không ạ , em vẫn không hiểu lắm về static member trong C++, rồi về toán tử :: trong C++ nữa.
Cảm ơn các anh chị
Bài liên quan
This post was flagged by the community and is temporarily hidden.
::
là để truy cập biến, hàm, v.v… trong 1 namespace, hoặc truy cập biến/hàm static của 1 class. Hiểu nó như là toán tử tìm kiếm “người” trong 1 “họ” nào đó vậy. Ví dụNguyễn::
thì truy cập những người thuộc họ Nguyễn. Ví dụ lớp có 2 người tên “VănMinh” nhưng khác họ thì mỗi lần gọi là gọiTrần::VănMinh
vớiNguyễn::VănMinh
static member là của chung. Còn member bình thường là của riêng của đối tượng tạo ra từ class đó. Method bình thường gọi / truy cập hàm/biến static được, nhưng hàm static thì ko gọi được method/biến bình thường
output
nếu xài namespace thì các biến / hàm trong namespace đều là public, thực chất là chả có khái niệm public/private gì trong namespace cả. Đôi khi ta cần hạn chế truy cập vài biến/hàm trong namespace thì phải xài class + private static member.
1 biến static điển hình là
std::string::npos
được định nghĩa:static const size_t npos = -1;
npos dùng để kiểm tra xem kết quả tìm kiếm chuỗi có tìm ra hay ko
nếu thay
s.npos
bằngstd::string::npos
cũng được nhưng quá dài, nếu thay bằng-1
thì ko chắc, lỡ có thư viện nào chơi đểu định nghĩanpos = -2
thì kiểm tra-1
ko đúng. Với lại giá trị trả về củas.find(...)
làsize_t
, nghĩa là số nguyên ko dấu thì kiểm tra với-1
là số nguyên có dấu thì ko “đúng” cho lắm.Anh giải thích thêm cho em về cách tạo namespace và cách sử dung của nó được không ạ? Em cảm ơn
This post was flagged by the community and is temporarily hidden.
Cách tạo namespace thì bạn có thể search trên mạng sẽ đầy đủ hơn, ở đây mình nói ngắn gọn về cách sử dụng của nó.
Giả sử bạn viết 1 function nhưng function đó đã tồn tại trước đó rồi nhưng bạn k thể nào đổi tên function được vì nếu đổi tên sẽ không thể hiện được chức năng của function đó, vậy làm thế nào để giải quyết vấn đề trên. Chúng ta có cách giải quyết đơn giản đó là đưa function đó vào chịu sử quản lý của namespace, 2 function cùng tên nhưng chịu sử quản lý của 2 namespace khác nhau thì không ảnh hưởng gì tới nhau cả.
cách tạo đơn giản lắm, bao xung quanh mấy cái hàm bằng namespace là được.