2011-12-10 16 views
12

Tôi đã đọc rằng sự khác biệt chính giữa các lớp và cấu trúc (ngoài chức năng), là thành viên lớp mặc định là riêng tư, trong khi cấu trúc thành viên mặc định là công khai.C++ Cấu trúc riêng

Điều đó ngụ ý rằng các thành viên cấu trúc có thể là riêng tư. Câu hỏi của tôi là: Bạn có thể có các thành viên cấu trúc riêng không? Và nếu bạn có thể, mục đích của việc sử dụng các thành viên tư nhân là gì? Làm thế nào bạn thậm chí sẽ truy cập chúng?

+0

Bạn sẽ truy cập các thành viên cấu trúc riêng tư giống như cách bạn truy cập các thành viên lớp học riêng tư. Câu hỏi chỉ có ý nghĩa nếu bạn nghĩ về cấu trúc và các lớp khác nhau. Hãy thử nghĩ về chúng khá giống hệt nhau. –

Trả lời

19

Có cấu trúc có thể có các thành viên riêng tư, bạn chỉ cần sử dụng trình chỉ định truy cập cho cùng.

struct Mystruct 
{ 
    private: 
     m_data; 

}; 

Chỉ khác biệt giữa cấu trúc và lớp là:

  • truy cập specifier mặc định là tin cho các lớp học và công cộng cho struct
  • mặc định thừa kế để riêng cho các lớp học và công cộng cho struct

Bạn có thể truy cập chúng bằng cách nào?
Cũng giống như bạn truy cập các thành viên riêng tư của một lớp học. ví dụ: họ chỉ có thể được truy cập trong các chức năng cơ cấu thành viên và không có trong cấu trúc có nguồn gốc, vv

1

Các chỉ chênh lệch giữa structclass là truy cập mặc định (ngoại trừ một số trường hợp mẫu lạ, xem ý kiến ​​Alf của dưới đây) . Điều này có nghĩa bạn có thể truy cập các thành viên tư nhân trong cùng một cách như trong một lớp:

struct foo { 
    int get_X() { return x; } 
    void set_X(int x_) { x = x_; } 
private: 
    int x; 
}; 

Cho dù bạn sử dụng struct hoặc class, sau đó, hoàn toàn là một vấn đề của phong cách. Tôi có xu hướng sử dụng struct khi tất cả các thành viên đều công khai (ví dụ, nếu đó là một lớp functor không có biến thành viên và chỉ có các hàm công cộng).

+4

tốt, liên quan đến các từ khóa cũng có sự khác biệt trong danh sách tham số mẫu, ví dụ: 'template