2012-06-12 31 views
9

Tôi luôn nghĩ về một cấu trúc như một đối tượng có kích thước cố định và trong khi dường như không có bất kỳ lỗi biên dịch rõ ràng nào, tôi đã tự hỏi nếu làm điều này nói chung là thực hành tốt. Sẽ thay đổi cấu trúc cho một lớp được khuyến khích hơn hoặc sẽ là một cấu trúc làm chỉ là tốt?Có thể/nên lưu trữ một vector trong cấu trúc không? C++

Mã, chỉ vì người ta kén chọn:

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

Bản chất của những gì tôi đang làm là có con của một lớp như các loại giống như cha mẹ. Khi cha mẹ qua đời, các em cũng vậy.

+7

Một 'struct' chỉ là một lớp có hiển thị mặc định là' public' thay vì 'private'. –

+2

Lưu ý rằng việc thêm các thành viên với contructor/destructor vào một cấu trúc làm cho trình biên dịch phát ra một constructor/destructor cho cấu trúc là tốt. Kỹ thuật kiểu C có nghĩa là cấu trúc POD sẽ không hoạt động. –

+0

Lưu trữ một vector bên trong cấu trúc không làm cho nó thay đổi kích thước của nó. Các mục của Vector được lưu trữ trên heap, do đó kích thước của cấu trúc vẫn giữ nguyên, bất kể vector có 0 hay 1000 phần tử. – mfontanini

Trả lời

15

An std::vector có kích thước cụ thể đã biết và mọi lớp hoặc cấu trúc có chứa nó có kích thước cụ thể đã biết. std::vector phân bổ bộ nhớ trên heap để hoạt động như một mảng có kích thước biến và lưu trữ một con trỏ tới bộ nhớ đã nói. Sự khác biệt duy nhất giữa một cấu trúc và một lớp là một cấu trúc mặc định là công khai, và một lớp là mặc định riêng tư.

+0

Cảm ơn bạn. Điều đó chắc chắn có ý nghĩa rằng vectơ sẽ chỉ phục vụ như một con trỏ tới bộ nhớ trong heap. Cảm ơn bạn đã trả lời chi tiết. –

+0

Mặc định? Theo mặc định? – Inverse

7

Sự khác biệt giữa structclass phải làm với tầm nhìn thành viên: sự khác biệt đáng chú ý nhất là struct thành viên s là công khai theo mặc định, và cũng là struct 's thừa kế là công khai theo mặc định; class thành viên và class thừa kế đều là riêng tư theo mặc định. Ngoài ra, không có sự khác biệt: bạn luôn có thể viết mã với struct để tạo mã tương đương với mã được viết bằng class và ngược lại.

Các vấn đề liên quan