[C++] 基本文法

  情報系, プログラミング, C++

基本文法

このページは勉強用ではありません.一度,学習して見返すときなどに使用してください.

C++のファイル

C++はソースファイルとヘッダーファイルの2つがある.ファイルの拡張子には,規定されてはいないが一般的にソースファイルには「cpp」が使用されることが多い(特殊な環境かでは「cc」や「cxx」などもある).ヘッダーファイルには一般的に「h」や「hpp」が用いられる.


メイン関数

C++はメイン関数と呼ばれるものが一番最初に実行される.

#include <iostream>
// ↓これがメイン関数
int main()
{
    std::cout << "Hello World" << std::endl;
    return 0;
}

コメント

C++のコメントでは,範囲を指定するコメント(/* */)と行コメント(//)の2つがある.

// 行コメント(//の後ろ1行がコメントになる)
/* 
  範囲指定コメント
  「/*」と「* /」で挟まれている部分がコメントになる
*/

変数宣言・定義

C++では以下のように変数を宣言する.

// 特殊な変数型keyword 符号有無keyword 変数型のkeyword 変数名;
// 文字系統 変数宣言
char c;               // 1バイト

// 整数系統 変数宣言
short s;              // 2バイト
int i;                // 4バイト
long l;               // 4バイト
long long ll;         // 8バイト

// 実数系統 変数宣言
float f;              // 4バイト
double d;             // 8バイト
long double ld;       // 16バイト

// ブーリアン型
bool b;               // 1バイト([true]もしくは[false]のみ)

// 符号有無keywordは「signed」と「unsigned」の2つしかない
// 省略した場合には「singed」が自動挿入されるが
// 変数型のkeywordやコンパイラによっては「unsigned」が自動挿入される場合がある
int si1;              // 符号ありint型
signed float sf;      // 符号ありfloat型
unsigned int ui;      // 符号なしint型
unsigned float uf;    // 符号ありfloat型

// 特殊な変数型のkeywordとして
// 「const」「constexpr」「static」「extern」などがよく使われる(他にもある)
const int ci=0;       // int型時定数
constexpr float cf=2; // float型コンパイル時定数

// 変数名の前に*を付けるとポインタ変数になる
int *pi;              // int型ポインタ変数
float *pf;            // float型ポインタ変数

演算

C++ができる演算は,「加算」「減算」「乗算」「除算」「剰余算」「論理和」「論理積」「反転」「排他的論理和」「代入」「左シフト」「右シフト」である.

// 演算用に適当に変数用意
int a=210;
int b=12;

// 演算
a+b;        // 加算
a-b;        // 減算
a*b;        // 乗算
a/b;        // 除算
a%b;        // 剰余算
a|b;        // 論理和
a&b;        // 論理積
~a;         // 反転
a^b;        // 排他的論理和
a=b;        // 代入(aにbを代入)
a<<b;       // 左シフト(aを左にbだけシフト)
a>>b;       // 右シフト(aを右にbだけシフト)

静的配列・動的配列

C++には,静的配列と動的配列の2種類がある.

int n=100;

// 1次元配列
int a[100];                 // 要素数100のint型静的配列
int *b = new int[n];        // 要素数nのint型動的配列
float c[50];                // 要素数50のfloat型静的配列
float *d = new float[n/2];  // 要素数n/2のfloat型動的配列

// 二次元配列
int x[10][20];              // 要素数[10]x[20]のint型二次元静的配列
float y[100][200];          // 要素数[100]x[200]のfloat型二次元静的配列

条件分岐処理(if-else)

C++には,条件分岐処理として条件式を用いたif-elseがある.

// if(条件式){...}
if(a<b){
  // a<bのときに実行される処理;
}
else if(a==b){
  // 必要ない場合には else if は省略できる
  // a=bのときに実行される処理;
}
else{
  // 必要ない場合には else は省略できる
  // a<b でも a=b でもないときに実行される処理;
}

// {...}の中身が1つの処理しかない場合には、{}を省略できる。
if(a<b) program1;
else if(a==b) program2;
else program3;

// 条件式に使用できる比較演算子は以下のもの
if(a<b);        // aがbより小さい
if(a<=b);       // aがb以下
if(a>b);        // aがbより大きい
if(a>=b);       // aがb以上
if(a==b);       // aとbが等しい
if(a!=b);       // aとbが等しくない

// 複数の条件式を用いる場合
if(-a<b && b<a);  // -a<b かつ b<aのとき
if(a==b || a==0); // a==b もしくは a==0のとき

条件分岐処理(switch-case-default)

C++には,条件分岐処理として変数のパラメータを用いたswitch-caseがある.
break;を書き忘れるとそれ以下に書かれているcaseについて処理されるので注意.

switch(pattern){
  case 0:
    // pattern == 0 のときに実行される処理;
    break;
    
  case 1:
  case 2:
    // pattern == 1 もしくは pattern == 2のときに実行される処理
    break;
    
  default:
    // patternがどのcaseにも合致しなかった場合に実行される処理
    break;
}

繰り返し処理(while)

C++には,繰り返し処理として,条件式のみを用いたwhileがある.1度は必ず処理をしたいプログラムについては,do-whileを用いる.

// while(条件式){...}
while(a<b){
    // 条件式を満たしているのを確認した後に
    // 処理を実行し、whileの箇所に戻る
}

// do{...}while(条件式);
do{
    // 処理を実行した後に
    // 条件を満たしていれば、doの箇所に戻る
}while(a<b);

繰り返し処理(for)

C++には繰り返し処理として,条件式および変数の更新機能を用いたforがある.

// for(繰り返し前の処理;条件式;ループ処理後の処理){...}
for(program1;a<b;program2){
    // a<bを満たす時に実行される処理
    program3;
}

上のプログラムであれば,[program1]⇒[条件式チェック]⇒[program3]⇒[program2]⇒[条件式チェック]⇒[progmram3]⇒[program2]⇒…というように処理されていく.

関数宣言・定義

C++には,サブルーチン処理として,関数と呼ばれる機能がある.

プログラムをサブルーチンさせるときなどは,自分で関数を作成しなければならない.また,C++ではプロトタイプ宣言を行うことを推奨している.プロトタイプ宣言とは,main関数の前などに関数が存在することを宣言することである.

戻り値の型や引数の型は,変数宣言のところで書かれているように記述する.戻り値は,カンマで区切ることでいくつでも用意することができる.関数宣言時には引数名は省略することもできるが,書いておいた方が後々わかりやすい.

// プロトタイプ宣言された関数
// プロトタイプ宣言するとすべての関数でアクセス可能
// 戻り値の型 関数名(引数型 引数名);
void function1(int a);

// プロトタイプ宣言しないで関数定義
// プロトタイプ宣言していない関数は定義より下にある関数でしかアクセスできない。
void function2()
{
    std::cout << "function2" << std::endl;
}

// メイン関数
int main()
{
    int a=0;
    function1(a);     // OK
    function2();      // OK
    function3(b);     // コンパイルエラー!!
                      // ⇒function3の定義より上にあるため
}

// プロトタイプ宣言した関数定義
void function1(int a)
{
    return a*a;
}

// プロトタイプ宣言してない関数定義
void function3(int b)
{
    return 2*b;
}

LEAVE A COMMENT