C++ được cho phép để tăng kích thước có nguồn gốc class nếu không có không có biến member mới so với lớp cơ sở?


0 Phiếu
Đã hỏi 18/5/2016 bởi pybpiede (260 điểm)
Giả sử tôi có một class cơ sở với một số biến member và không có chức năng ảo:
class Base {
   int member;
};
và class có nguồn gốc đó có nguồn gốc một cách không ảo từ Base và đã biến member mới có một chức năng một lần nữa không ảo:
class Derived : Base {
};
rõ ràng sizeof(Derived) có thể không nhỏ hơn sizeof(Base). sizeof(Derived) yêu cầu để được ngang bằng với sizeof(Base)?

2 Câu trả lời

0 Phiếu
Đã trả lời 31/5/2016 bởi Voranlogo (460 điểm)
 
Câu trả lời hay nhất
Có là không có yêu cầu như vậy. Phần ngôn ngữ mà tôi có thể nghĩ đến, có liên quan chỉ là rằng mỗi đối tượng, cho dù hoàn thành hay không, và cho dù hầu hết nguồn gốc hay không, có một nhận dạng được đưa ra bởi cặp address của nó và loại của nó. X. C ++ 11 1.8/6: hai đối tượng mà không phải là chút các lĩnh vực có thể có address cùng nếu một là subobject khác, hoặc ít nhất một trong là một cơ sở class subobject kích thước zero và họ có loại khác nhau; Nếu không, họ sẽ có địa chỉ khác biệt. do đó, object hầu hết nguồn gốc và subobject ví dụ của bạn, cơ sở phải có bản sắc riêng biệt. Nó chắc chắn sẽ làm cho tinh thần cho một compiler để cung cấp cho cả hai BaseDerived một kích thước của 1, nhưng đây không phải là bắt buộc. Nó sẽ được chấp nhận nếu Base có kích thước 1729 và Derived đã có kích thước 2875.
Đã bình luận 31/5/2016 bởi koran (100 điểm)
Câu hỏi thú vị (+ 1). Tôi không biết câu trả lời, nhưng không thực sự thấy lý do tại sao các tiêu chuẩn sẽ đi ra khỏi con đường của nó để * cần * này.
0 Phiếu
Đã trả lời 31/5/2016 bởi Salvi_7214 (140 điểm)
Có là không có yêu cầu như vậy. Phần ngôn ngữ mà tôi có thể nghĩ đến, có liên quan chỉ là rằng mỗi đối tượng, cho dù hoàn thành hay không, và cho dù hầu hết nguồn gốc hay không, có một nhận dạng được đưa ra bởi cặp address của nó và loại của nó. X. C ++ 11 1.8/6: hai đối tượng mà không phải là chút các lĩnh vực có thể có address cùng nếu một là subobject khác, hoặc ít nhất một trong là một cơ sở class subobject kích thước zero và họ có loại khác nhau; Nếu không, họ sẽ có địa chỉ khác biệt. do đó, object hầu hết nguồn gốc và subobject ví dụ của bạn, cơ sở phải có bản sắc riêng biệt. Nó chắc chắn sẽ làm cho tinh thần cho một compiler để cung cấp cho cả hai BaseDerived một kích thước của 1, nhưng đây không phải là bắt buộc. Nó sẽ được chấp nhận nếu Base có kích thước 1729 và Derived đã có kích thước 2875.
Đã bình luận 02/6/2016 bởi Glc_nope (520 điểm)
Tôi không chắc là có bảo đảm một trong các tiêu chuẩn 'Derived' không thể nhỏ hơn so với 'Căn cứ', nếu các quy tắc class căn cứ sản phẩm nào được sử dụng.

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...