クラス内の他の何よりも前に宣言されたコンストラクターとデストラクタを常に見ます。これは、見つけやすくするために誰もが使用する優れたコーディング標準ですか、それともその背後には理由があります。たとえば、以下のコードのように、コンストラクタの前に変数を宣言することに問題はありますか?
class A
{
public:
int aVar;
A() :aVar(20) {}
~A() {}
};
クラス内の他の何よりも前に宣言されたコンストラクターとデストラクタを常に見ます。これは、見つけやすくするために誰もが使用する優れたコーディング標準ですか、それともその背後には理由があります。たとえば、以下のコードのように、コンストラクタの前に変数を宣言することに問題はありますか?
class A
{
public:
int aVar;
A() :aVar(20) {}
~A() {}
};
他の何よりも前にコンストラクターを宣言する特別な理由はありません。これは単なる規則またはコーディングの慣行です。これは、パブリック関数、パブリック メンバー、プライベート関数、プライベート メンバーの順に宣言し、関数をアルファベット順に宣言するようなものです。
理由のある唯一の順序付け基準は、メンバーをアルファベット順ではなく型サイズ順で宣言することです。これは、より小さなクラスを持つ簡単な方法だからです。
個人的には、コンストラクタとデストラクタの前に enum と typedef を置きます。
大会。通常、コンストラクターは最初に知りたいことです。オブジェクトができるまでは多くのことを行うことができず、コンストラクター(および割り当て)をコンストラクターの隣に配置するのは自然なことのようです。ただし、例外があります。多くの人がアクセスに応じてグループ化するため、コンストラクタは保護されているが、デストラクタはパブリック(および代入演算子はプライベート)である場合、必ずしもグループ化されるとは限りません。
まったくありません。コーディング スタイルの問題です。
個人的な好みを除いて、理由はまったくありません。メソッドの配置は、純粋に審美的な理由以外には関係ありません。
私は通常、コンストラクタとデストラクタ、メンバーとメソッドのクラスに別々のセクションを持ち、これらすべてを public、private、protected で分けています。コンストラクターは通常、クラスの外で最初に使用するものであるため、宣言の最初にコンストラクターを含めることは理にかなっています。もちろん、通常はコンストラクターを呼び出さないシングルトンなど、いくつかの例外があります。
本当に良いフォームです。インタープリターに違いはなく、フォームはおそらく、後で呼び出される前に宣言された関数が必要だった可能性のある以前の言語への逆戻りです...
答える
以下のコードのように、コンストラクターの前に変数を宣言することに何か問題がありますか?
さて、それの「問題」は、パブリック変数があることです。これも原則として問題ありませんが、ほとんどの C++ プログラマーは、すべての変数をプライベートにするか、すべてをパブリック (POD 構造体として) にすることを好みます。
あなたが意味すると仮定すると
class A {
int aVar;
public:
A() : aVar(20) {}
~A() {}
};
実際、FWIW 私はすべてのデータ メンバーを一番上に置くのが好きです。それは、クラスがどのように機能するかを理解しようとするときに最初に知る必要がある IMO です。
(現在、多くのプログラマーは、ファイルの主な目的はクラスがどのように機能するかを人々に教えることがファイルの主な目的ではなく、インターフェース.h
が何であるかだけであると言うでしょう。私は同意しません。たとえば、Doxygen のドキュメントはそのためにあります。実際の内部実装について知りたい場合は、ソース コードを参照してください。)
また、すべてのクラスをキーワードで開始し、後でそれを元に戻すのは奇妙な IMOですが、それはほとんど引数ではありません。public
private
もちろん、すべては実際には規則のみに関するものです。プロジェクト内のすべてのクラス宣言に特定のレイアウトがある場合は、それに固執する必要があります。他のすべては混乱を招きます。