はじめに Edit

このページの意味 Edit

  • 忘れないようにメモっておく。
  • 自分のコードでこれに違反してたらただちに取り締まる。

キャメルとは Edit

AbstractList,ObjectInformation,など
単語の頭が大文字にしたやつのこと,らしい。

POD型とは Edit

初期化の際に,newを必要としないものをPOD型,と認識している。
つまり,メンバ変数にクラスのポインタを所持し,
それをコンストラクタでnewするものは非POD型。

コーディングルール Edit

クラス Edit

非POD型はclassで定義する。
書式は次の通り。

  • 公開修飾子はpublic,protected,privateの順番
  • 要素の順番
    • typedef
    • static定数
    • static変数
    • static関数
    • メンバ変数
    • コンストラクタ
      • デフォルトコンストラクタ
      • コピーコンストラクタ
      • その他のコンストラクタ
    • デストラクタ
    • メンバ関数
    • 内部クラス・構造体

構造体 Edit

POD型はstructで定義する。

クラス・構造体名 Edit

キャメル。

typedef Edit

キャメルで。
privateなら + '_' 。

static定数 Edit

全部大文字,単語の区切りは'_'。

static変数・メンバ変数 Edit

基本としてprivateに書くこと!
小文字から始まるキャメル + '_'。
private以外なら '_' は除去。

static関数・メンバ関数 Edit

小文字から始まるキャメルで。
privateに記述する場合,頭に'_'。

内部クラス・構造体 Edit

キャメルで。
privateなら + '_' 。

列挙型 Edit

enumのこと。

列挙型名 Edit

キャメルで。

要素名 Edit

列挙型名 + '_' + キャメルで。

名前空間 Edit

namespaceのこと。

記述順番は次の通り。

タイプ1.タイプ宣言。

  • using タイプ名。
  • タイプ宣言。
    (abc順)

例:

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
-
|
|
-
|
!
!
 
namespace ns
{
  using ::Foo;
  class Hoge
  {
 
  };
}

タイプ2.前方参照

  • class タイプ名
  • struct タイプ名
    (abc順)

例:

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
 
-
|
|
!
 
namespace ns
{
 class Hoge;
 struct Foo;
}

名前 Edit

小文字から始まるキャメルで。

マクロ Edit

定数マクロなら,定数と同じ命名規則で。
関数っぽいマクロ( ex. abs() )なら,関数と同じ命名規則で。

インデント Edit

タブを使うこと。(タブサイズは4)

中括弧 Edit

中括弧は次のように,縦のラインをそろえること。
ただし,命令が1つの場合は,一行にまとめてよい。

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 
-
|
-
!
|
!
 
 
 
void main()
{
  while(1)
  {
  }
 
}
 
int getOne(){ return 1; }

また,タイプ宣言をするときに複数の名前空間を使う時は例外で,
中括弧が1つだけ後にでるように宣言する。

例:
namespace apcl { namespace util
{

 class RingBuff
 {
 };

} // end of namespace util
} // end of namespace apcl

インクルード Edit

インクルード順番 Edit

1.システムヘッダabc順
2.ユーザーヘッダabc順

インクルードガード Edit

インクルードガードは#ifdefでは書かない。

#pragma once にする。

ヘッダの形式 Edit

1.インクルードガード
2.インクルード
3.前方参照
4.型宣言

ソースの形式 Edit

1.実装するヘッダのインクルード
2.インクルード
3.using
4.無名空間
5.ヘッダの記述順に実装

グローバル変数・グローバル関数 Edit

使用しない。

inline Edit

inlineキーワードは使用しない。(コンパイラにがんばらせる)

virtual Edit

virtualキーワードは何よりも先に記述する。

const Edit

変数に対するconstキーワードはタイプ名の直前に付ける。

ファイルルール Edit

拡張子 Edit

.h : Cヘッダ
.c : Cソース
.hpp : C++ヘッダ
.cpp : C++ソース
.pch : プリコンパイルヘッダ

1タイプ1ヘッダ1ソース Edit

1つのヘッダファイル2つ以上の型を宣言しない。
ファイル名には,宣言した型の名前を用いる。
また,ヘッダに対応したソースファイルを必ず用意する。

1名前空間1ディレクトリ Edit

1つの名前空間に対して1つのディレクトリを作成する。
ディレクトリ名には,名前空間をそのまま使用する。

名前空間.h Edit

次のような感じで,名前空間で公開すべきヘッダをインクルード記述した名前空間.hを設置する。

ディレクトリ構造

mylib
+--util.h
+--util
|  +--RingBuff.hpp
|  +--RingBuff.cpp

util.hの中身

すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
 
 
 
 
/** @file @brief utilモジュールの公開ヘッダファイルのincludeを記述する **/
#pragma once
 
#include <mylib/util/RingBuff.hpp>

ポリシー Edit

newしたクラスがdeleteする Edit

原則として,newしたクラスが責任を持ってdeleteする。
ただし,FactoryMethodなどで,newしたものを渡すときは例外とし,
その場合はコメントに”必ずdeleteすべし”ということを書くこと。

公開するものに略称は使用しない Edit

原則として,型名,関数名など
公開するもに略称を使用してはいけない。


    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS