2010-03-26 44 views
5
class CRectangle { 
    int x, y; 
    public: 
    void set_values (int,int); 
    int area (void); 
    } rect; 

Trong ví dụ này, dấu 'rect' sau dấu đóng và giữa dấu chấm phẩy có nghĩa là gì trong định nghĩa lớp này? Tôi gặp khó khăn khi tìm một lời giải thích rõ ràng. Ngoài ra: Dù nó là gì, bạn có thể làm điều đó cho các cấu trúc không?Sự nhầm lẫn khai báo lớp - tên giữa dấu ngoặc ôm và nửa dấu chấm phẩy

Trả lời

10

rect là tên của một biến (một đối tượng trong trường hợp này).

Đó là chính xác như thể nó đã nói:

int rect; 

trừ thay vì int có một định nghĩa về một loại mới, được gọi là CRectangle. Thông thường, các loại lớp được khai báo riêng và sau đó được sử dụng làm

CRectangle rect; 

như bạn có thể đã quen thuộc, nhưng hoàn toàn hợp pháp để khai báo loại mới như một phần của tuyên bố như vậy.

Và vâng, nó hoạt động cho struct:

struct SRectangle { int x, y; } rect; 

Trong thực tế, bạn thậm chí không phải từ bỏ kiểu một tên nếu bạn không có kế hoạch để sử dụng nó một lần nữa:

struct { int x, y; } rect; 

được gọi là "cấu trúc ẩn danh" (và nó cũng hoạt động đối với các lớp).

+0

Đó là "cấu trúc chưa đặt tên", không phải là "cấu trúc ẩn danh". C++ không có cấu trúc ẩn danh. Xem http://stackoverflow.com/questions/2253878/why-does-c-disallow-unnamed-structs-and-unions –

2

Nó là một đối tượng kiểu CRectangle là toàn cầu hoặc thuộc về một không gian tên tùy thuộc vào ngữ cảnh.

+0

hoặc lớp học hoặc phạm vi địa phương. – kennytm

1

Nó khai báo một phiên bản. Giống như:

Không có sự khác biệt giữa một classstruct trong C++, ngoại trừ mặc định struct s cho công chúng (liên quan đến specifiers truy cập và thừa kế)

1

Một và chỉ khác biệt giữa cấu trúc và các lớp là các cấu trúc có thừa kế công khai và truy cập và các lớp sử dụng riêng tư làm mặc định cho cả hai.

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