A ++ lớp C "truyền thống" (chỉ một số tờ khai ngẫu nhiên) có thể giống như sau:C++ Lớp Truy cập Specifier verbosity
class Foo
{
public:
Foo();
explicit Foo(const std::string&);
~Foo();
enum FooState
{
Idle, Busy, Unknown
};
FooState GetState() const;
bool GetBar() const;
void SetBaz(int);
private:
struct FooPartialImpl;
void HelperFunction1();
void HelperFunction2();
void HelperFunction3();
FooPartialImpl* m_impl; // smart ptr
FooState m_state;
bool m_bar;
int m_baz;
};
tôi luôn luôn tìm thấy kiểu này đặc điểm kỹ thuật cấp độ truy cập xấu xí và khó khăn để làm theo nếu các lập trình viên gốc đã không tổ chức "vùng truy cập" của mình một cách gọn gàng.
Lấy một cái nhìn tại các đoạn mã tương tự trong một # kiểu Java/C, ta có:
class Foo
{
public: Foo();
public: explicit Foo(const std::string&);
public: ~Foo();
public: enum FooState
{
Idle, Busy, Unknown
};
public: FooState GetState() const;
public: bool GetBar() const;
public: void SetBaz(int);
private: struct FooPartialImpl;
private: void HelperFunction1();
private: void HelperFunction2();
private: void HelperFunction3();
private: FooPartialImpl* m_impl; // smart ptr
private: FooState m_state;
private: bool m_bar;
private: int m_baz;
};
Theo tôi, đây là dễ dàng hơn để đọc trong một tiêu đề vì sự xác định quyền truy cập là đúng bên cạnh mục tiêu, và không phải là một loạt các dòng đi. Tôi thấy điều này đặc biệt đúng khi làm việc với mã mẫu tiêu đề chỉ không được tách thành cặp "* .hpp/*. Inl" thông thường. Trong kịch bản đó, kích thước của việc triển khai chức năng áp đảo thông tin nhỏ nhưng quan trọng này.
Câu hỏi của tôi rất đơn giản và bắt nguồn từ thực tế là tôi chưa bao giờ thấy bất kỳ ai khác tích cực làm điều này trong mã C++ của họ.
Giả sử rằng tôi không có IDE có khả năng "Chế độ xem lớp", có bất kỳ hạn chế rõ ràng nào khi sử dụng mức độ chi tiết này không?
Bất kỳ đề xuất kiểu nào khác đều được hoan nghênh!
Đối với định nghĩa hàm mẫu trực tiếp trong định nghĩa lớp ... điều đó không quan trọng đối với một lớp lót nhưng thực sự khó hiểu giao diện lớp ngay sau khi nó phát triển. Cá nhân tôi không tách tiêu đề của tôi trong .h/.i, đặt tôi đặt định nghĩa của các hàm * lớn * ở cuối tệp. –