|
|
|
|
@ -20294,24 +20294,44 @@ When declaring a class use the following order
|
|
|
|
|
|
|
|
|
|
Use the `public` before `protected` before `private` order.
|
|
|
|
|
|
|
|
|
|
Private types and functions can be placed with private data.
|
|
|
|
|
##### Example
|
|
|
|
|
|
|
|
|
|
Avoid multiple blocks of declarations of one access (e.g., `public`) dispersed among blocks of declarations with different access (e.g. `private`).
|
|
|
|
|
class X {
|
|
|
|
|
public:
|
|
|
|
|
// interface
|
|
|
|
|
protected:
|
|
|
|
|
// unchecked function for use by derived class implementations
|
|
|
|
|
private:
|
|
|
|
|
// implementation details
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
##### Example
|
|
|
|
|
|
|
|
|
|
Sometimes, the default order of members conflicts with a desire to separate the public interface from implementation details.
|
|
|
|
|
In such cases, private types and functions can be placed with private data.
|
|
|
|
|
|
|
|
|
|
class X {
|
|
|
|
|
public:
|
|
|
|
|
// interface
|
|
|
|
|
protected:
|
|
|
|
|
// unchecked function for use by derived class implementations
|
|
|
|
|
private:
|
|
|
|
|
// implementation details
|
|
|
|
|
// implementation details (types, functions, and data)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
##### Note
|
|
|
|
|
##### Example, bad
|
|
|
|
|
|
|
|
|
|
Avoid multiple blocks of declarations of one access (e.g., `public`) dispersed among blocks of declarations with different access (e.g. `private`).
|
|
|
|
|
|
|
|
|
|
class X { // bad
|
|
|
|
|
public:
|
|
|
|
|
void f();
|
|
|
|
|
public:
|
|
|
|
|
int g();
|
|
|
|
|
// ...
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
The use of macros to declare groups of members often violates any ordering rules.
|
|
|
|
|
The use of macros to declare groups of members often leads to violation of any ordering rules.
|
|
|
|
|
However, macros obscures what is being expressed anyway.
|
|
|
|
|
|
|
|
|
|
##### Enforcement
|
|
|
|
|
|