名前空間という範囲を作ることができる
namespace Ns{
int var;
void func(){
int a,b,c;
...
}
}
などで宣言して適当にNs::varなどで中身を使う
Ns::をわざわざつけるのが面倒な場合はUsing文で指定しておく
Using Ns::var;
Using namespace Ns;
スコープ演算子の使い方
名前空間::変数名など
stdという名前空間にあるcoutはstd::coutでいじれる
グローバル名前空間にあるグローバル変数gvarは::gvarでいじれる
他のファイルで宣言されているグローバル変数を使う場合はextern int gvar;で宣言しておく
静的変数
ローカル変数の前にstaticをつけると関数が終了してもその変数が破棄されない
プログラムの実行開始時にメモリ上に保持され初期値も与えられる
プログラムの実行が終了する直前まで消えない。
staticを関数やグローバル変数につけると同じファイル内でのみ呼び出すことが可能(内部リンケージを持つ)
グローバル変数や静的寿命を持つローカル変数は指定が無い場合に0で初期化される
動的メモリ
new 型名でメモリを確保する
int *p;
p =
new int;
delete ポインタ名でメモリ解放する
delete p;
配列の場合
int *p;
p = new int[4];
delete
[] p;
変数を格納するメモリ領域の名前は
・ローカル変数はスタック
・静的変数は静的記憶領域
・動的に確保されるメモリは動的記憶領域(ヒープ領域)
とそれぞれ呼ばれるらしい
スタックと呼ぶのは紛らわしいんじゃないかと思う
関数のプロトタイプ宣言をまとめたファイルをヘッダファイルと呼ぶ
#include "proto.h"などで読み込む
通常はプロトタイプ宣言はヘッダファイルに分けておくらしい
分けておけばヘッダファイルを読み込むだけで呼び出すときに引数などを間違えているとエラーを吐く
本にはそう書いてあったけど実際にはプロトタイプ宣言だけでなく列挙型とかextern int gvar;とかも書いて良いような?
列挙型
enum Type {Identifier1, Identifier2, Identifier3};
Type型の変数を使えるようになる
この場合Type型にはIdentifier1,Identifier2,Identifier3のどれかが格納できる
Type enumerate;
enumerate = Identifier2;
手元の本ではswitch文の例が書いてあった
共用体
union Type {
int a;
int b;
};
メンバがメモリを共有する
どれを読み書きても同じ場所のメモリを読み書きする
Type uni;
uni.a=1;
とするとuni.bの値も1になる
アロー演算子
構造体のメンバへのアクセスはst.memでアクセスする
構造体へのポインタを使って構造体のメンバにアクセスする場合はpt
->memでアクセスする
「せいてき」で変換すると「静的」ではなく「性的」と変換される
私のPCは病気でしょうかPR