クラスとクラス識別ポインタでノーポインタ#を。
1.重複のヘッダーの導入を防ぐために、ガード防衛が宣言ヘッダファイルを追加します。
2.ヘッダファイルのレイアウト
事前宣言、クラス宣言、クラス定義を含みます
栗:
class complex
{
public:
complex(double r = 0, double i = 0)
:re(r), im(i)
{
}
complex& operator += (const complex&);
double real() const { return re; }
double imag() const { return im; }
private:
double re, im;
friend complex& _doapl(complex*, const complex&);
};
template <typename T>
class complex
{
public:
complex(T r = 0, T i = 0)
:re(r), im(i)
{
}
complex& operator += (const complex&);
T real() const { return re; }
T imag() const { return im; }
private:
T re, im;
friend complex& _doapl(complex*, const complex&);
};
注意:
関数が定義されたクラス本体内に完了している場合は1、インライン候補となります。インラインクラスは、達成するために、外側本体の前に書かれました。
2.アクセスレベルのアクセスレベル:官民など
3.ctorコンストラクタ:デフォルト引数の初期値列割り当ては、(初期化データは、効果は同じであるが、最初の列のコンストラクタ(前者は、後者の割当を初期化さにおける初期化ではなく、異なるタイミングおよび効率)を有します)
4.コンストラクタは、ヘビーデューティの数を(コンパイラがユニークな名前を生成します)(同じ関数のオーバーロード)の呼び出しがあいまいであるせないように注意して持つことができます
プライベート領域(例えば、シングルトン)に入れ5.ctor
class A
{
public:
static A& getInstance();
setup(){...}
private:
A();
A(const A& rhs);
};
A& A::getInstance()
{
static A a;
return a;
}
6.定数[] constメンバ関数この変形例は、ユーザがコールに一定のオブジェクトを使用することができない一定のメンバ関数この[料金]の内容を変更しない場合はありません。
7.パラメータ渡し:(CONSTに)参照することによって付加価値対-passによって-pass -
参照渡しにしてください。
8.戻り値が渡されます(定数)が参照によって戻り対値によってリターン
戻り値は、参照によって渡すようにしてみてください(一時オブジェクトの場合に注意してください)
9.friend(友人)
inline complex& _doapl(complex* ths, const complex& r)
{
ths->re = r.re;
ths->im = r.im;
return *ths;
}
同じクラス共通の友人の友人のさまざまなオブジェクト
10.演算子のオーバーロード
メンバ関数と非メンバ関数のオーバーロードなど
11.送信機は、フォームrefrenceで受信された受信者を知る必要はありません
inline complex&
_doapl(complex* ths, const complex& r)
{
return *ths;
}
inline complex&
complex::operator +=(const complex& r)
{
return _doapl(this, r);
}
{
c3 += c2+=c1;
}
12.localオブジェクトは、ポインタまたは参照を返すことができません
13.typename();一時オブジェクト匿名オブジェクト
14.オーバーロードされた<<
ostream&
operator << (ostream& os, const complex& x)
{
return os << "(" << real(x) << "," << imag(x) << ")";
}