GeekBand C++オブジェクト向け高度プログラミング(上)(2週目):ピックアップ
1466 ワード
今週は主にばらばらな知識点を記録します.
1.コピーコンストラクタ#
ポインタ付きクラスユーザーが独自のコピーコンストラクタを作成する理由:コンパイラのデフォルトのコピーコンストラクタはbit by bitのモードで行われ、メンバー変数にポインタが含まれている場合、2つのクラスのポインタメンバー変数は同じメモリアドレスを指します.いずれかのクラスがそのメモリを解放すると、別のクラス、すなわち別のクラスポインタが指すアドレスが無効になります.
2.コピー付与関数#
ポインタ付きクラスユーザーが独自のコピー付与関数を作成する理由:理由は同じです.
3.コピー付与関数の自己付与チェック#
Demo_0
Demoのように0のようにs 1=s 1は、何気なくとても愚かなことで、私たちは普通はしませんが、誰が知っていますか.このような状況に備えるために、Demo_1
これはいい方法ですが、実は『Effective C++』では他の方法を紹介しています.本は手元になく、後で補充します.
4.参照をいつ使用するか
戻り値がlocal objectでなければreferenceを転送できます
5.static#クラスでは、staticメンバーデータ(変数、定数)を定義したり、staticメンバー関数を定義したりできます. staticメンバーデータはメモリに1つしかありません.クラスのインスタンスに属していません.クラスのインスタンス化よりも先に存在します. staticメンバー関数staticメンバーデータ を処理するために使用される
6.この1部のみ staticメンバーデータはメモリに1部しかないと述べていますが、実はそれだけでなく、クラスのメンバー関数もメモリに1部しかありません.だから今分かったのは、なぜ計算クラスの大きさが小さいのか、メンバー関数を計算したことがないのではないでしょうか. また、メンバー関数がメモリに1部しかない以上、同じクラスの異なるインスタンスはどのようにメンバー関数を呼び出しますか?次の例を参照してください:Demo_2
すなわち,クラスがメンバー関数を呼び出す場合,クラスのアドレスを参照として関数に渡す.(2つ目の書き方が理解できない場合は、オペレータがリロードしたメンバー数の書き方を参照してください)
ひとまずここまで
1.コピーコンストラクタ#
ポインタ付きクラスユーザーが独自のコピーコンストラクタを作成する理由:コンパイラのデフォルトのコピーコンストラクタはbit by bitのモードで行われ、メンバー変数にポインタが含まれている場合、2つのクラスのポインタメンバー変数は同じメモリアドレスを指します.いずれかのクラスがそのメモリを解放すると、別のクラス、すなわち別のクラスポインタが指すアドレスが無効になります.
2.コピー付与関数#
ポインタ付きクラスユーザーが独自のコピー付与関数を作成する理由:理由は同じです.
3.コピー付与関数の自己付与チェック#
Demo_0
MyClass s1;
...
s1 =s1;
Demoのように0のようにs 1=s 1は、何気なくとても愚かなことで、私たちは普通はしませんが、誰が知っていますか.このような状況に備えるために、Demo_1
if(this == & str)
return *this;
これはいい方法ですが、実は『Effective C++』では他の方法を紹介しています.本は手元になく、後で補充します.
4.参照をいつ使用するか
戻り値がlocal objectでなければreferenceを転送できます
5.static#
6.この1部のみ
class myclass
{
public:
void func();
};
...
myclass m1;
myclass m2;
...
//when calling func(),we use it in the follow form;
m1.func();
m2.func();
//Absolutely,it equals to what I show next;
func(&m1);
func(&m2);
すなわち,クラスがメンバー関数を呼び出す場合,クラスのアドレスを参照として関数に渡す.(2つ目の書き方が理解できない場合は、オペレータがリロードしたメンバー数の書き方を参照してください)
ひとまずここまで