完全な「C++入門」ではなくて、 いろいろな機会に説明した内容等を適宜あげていきます。 所謂テキストとはちがった説明もしているかもしれません。 足りないところは、他の参考資料を見て補完してください。 ブログラムは大雑把にいってしまえば、命令(コマンド、関数等)の集合。 それぞれをコンピュータが解釈できるように一定のルール(文法)にそって 書きます。コンピュータが解釈といっても、実際には 「ソフトウェアが解釈できるように」というのがよりただしい。 C++の場合は、C++のコンパイラと呼ばれるプログラムが解釈できるように かかれたテキストファイルを作ります。

命令の単位

「一行に一命令」というような言語もありますが、C++では 命令の最後を;で表します。例えば
int a(2);
double b(1.0);
a = a + 2;
というようなプログラムは
int a(2);double b(1.0);a = a + 2;
と書いても同じ動きをします。また
int a(2);double b(1.0);
a = 
  a + 2;
と途中に改行がはいっても同じです。 プログラム中の空白、改行は基本的には無視されます。あってもなくても プログラムの動作には影響しません。 (とはいえ全角の空白は話が別。 コンパイラからは全角空白と半角空白は別の文字に見えます。 無視してくれません。 後述のコメントを日本語で書く人もいますが、全角空白には注意が必要。)

コメント文

プログラムの中で内容説明を残したい場合があります。 場合というよりも、積極的に残す事が進められています。 コンパイラにはその部分を無視してもらいたいので、 コメント文を示すルールがあります。 C++には2種類のコメント表記があり、「行」、 「ブロック」でのコメントを記入できます。
// コメント文
int a(2);
/*←ここから コメントのブロック指定。 ここもコンパイラには 無視されます。 ここまで →*/
double b(1.0); double c; // 命令の後にコメント文を入れる事も出来ます。

スコープ

複数の命令を「スコープ」としてまとめる事ができます。 スコープは{}の括弧でくくります。
{ int a; int b; } // スコープ
// スコープ
{ 
  double c = 1.0;
  double b = c + 4.0;
}

もう一つのスコープ

変数の種類

とりあえず
説明
int整数用の変数
float実数用の変数
char文字変数
を覚えておきましょう。変数の型には他にもありますが、基本はこの3つ。

変数の用意

プログラム中で変数を利用する場合は、どこかで変数を用意する必要があります。 変数はいわば「値をいれておく容器」です。この容器は空であることはなく、 常になにか入った状態です。(0といえど、0という値が入っていると考えます) しかし容器を用意した時点で、その容器の中身(初期値・既定値・デフォルト値) は定められていません。そこで初期値を指定しながら変数を用意します。
int a = 1;     // 整数型変数 a を用意して、1という値を代入
int a(1);      // 初期値が 1 の整数型変数 a 用意
char c = 'a';  // 文字型変数 c を用意して、'a'という値を代入
char c( 'a' ); // 初期値が 'a' の文字型変数 c を用意
初期値の指定は、代入演算子 = を利用し、 変数生成後に値を代入してもよいですし、 初期値を指定して生成演算子(コンストラクタ)を呼び出しても構いません。

変数を使った演算

用意した変数を利用し、様々な演算(operation)を行う事ができます。 演算は演算子(operator)を利用します。
種類説明
代入演算子
 a = 2
比較演算子
 a == b; a < b; a > b, ...  
四則演算子
 a + b, a - b, a * b, a / b, ... 

変数の配列

関数(function)とは、いわゆる数学で出てくるy=f(x)の様に、 ある変数xを使ってなんらかの計算を行うものです。 C++でも関数の振る舞いはほとんど同じで、入力変数を利用してなんらかの 処理を行います。数学のケースと違うのは入力や出力は必ずしも必要ない ことでしょう。

関数を作る

たとえば2乗を計算するようなプログラムを考えます。
  int a(1), b(2), c(3), a2(0), b2(0), c2(0);

  a2 = a*a;// a の2乗を a2 に代入
  b2 = b*b;// b の2乗を b2 に代入
  c2 = c*c;// c の2乗を c2 に代入
2乗程度であれば間違いは少ないですが、それでも変数の種類が多くなると タイプミスの確率は大きくなります。そこで2乗部分を一つの関数にまとめます。
// 関数 square の宣言 // 引数: const int& // 返値: int
int square( const int& a ){ return a*a; } ... a2 = square( a ); //関数 square の返値を a2 に代入 b2 = square( b ); //関数 square の返値を b2 に代入 c2 = square( c ); //関数 square の返値を c2 に代入 ...
クラス、オブジェクトというものがあります (オブジェクトを「クラスオブジェクト」と呼ぶ事もあります)。 例えば「車」なんてものはクラスで、「私の車」はオブジェクトです。 つまりある要素の性質を決めるもの「型」がクラスであって、 その型の属性をもつ「物」がオブジェクトです。 C++では色々なクラスのオブジェクトを作り、 そのオブジェクトに備わっている機能を利用する形で プログラムを作ります。 クラスはいろいろなライブラリが提供するものを使う事もできますし、 自分で定義する事もできます。

オブジェクトを作る

Carというクラスがあるとしましょう。 そのオブジェクトを作る場合
...
  // CarというクラスのオブジェクトをmyCarという名前でつくる
  Car myCar;
...
と書きます。作成したのちオブジェクトを利用します。

オブジェクトを使う

クラスにはいろいろな機能が定義されています。 車にはクラクションを鳴らす(horn)機能があるとします。 どんな機能があるかはそのクラス設計によりますが、 C++では
class Car {
public:
  void horn();
};
と定義されているかもしれません。これはCarクラスは horn()という機能をもっている事を示しています。 この様にクラスにそなわった機能の事を「メソッド」と呼びます (「メンバー関数」という場合もあります)。 提供されているメソッドを使う場合
...
  myCar.horn();
...
と書きます。 ただしオブジェクトを作成する前に使う事はできません。
...
  // myCar.horn();  作成前に使用する事はできない
  // CarというクラスのオブジェクトをmyCarという名前でつくる
  Car myCar;
  myCar.horn();   // 作成後に使用
...

オブジェクトの寿命

生成したオブジェクトには「寿命」があります。 オブジェクトは生成されたスコープの終了時に 自動的に消去されます。
Car publicCar;
{
  publicCar.horn();
  Car myCar;
  myCar.horn();
  ....
  // ここで myCar は消滅
}
// publicCar はまだ生存
スコープの外側で生成されたオブジェクトを利用する 事はできますが、その逆にあるスコープ内で生成されたオブジェクトを その外側から使う事はできません。
Car publicCar;
{
 // スコープの中から publicCar を使う事は可能
  Car myCar;
  ....
  // ここで myCar は消滅
}
// publicCar はまだ生存
// myCar はつかえない
オブジェクトの生成にはもう一つ別の方法があります。
...
  Car *pMyCar = new Car;
...
この様につくったpMyCarを 「ポインター変数」と呼びます (ポインターオブジェクトではないんですねぇ)。 利点としては最初の作り方とは違って、スコープに縛られずに オブジェクトが永続します。オブジェクトの消滅はユーザーが
...
  delete pMyCar;
...
と明示的に行わなければなりません。またメソッドを使う場合も
...
  pMyCar->horn();
...
.ではなくて -> で指定します。 特別な場合を除いて ポインターオブジェクトを作る利点はそれほど高くないので、 通常は初めの方法でオブジェクトを作りましょう。
例外: ROOTを使う場合は逆で、とりあえず newを使ってプログラム(マクロ)を書いておいて、 問題が生じたら変更する方が良いかも。

メンバーメソッドの確認の方法

クラス定義をみるのが確実です。 通常ヘッダーファイルというものが提供されて、その中でクラスの定義が 行われています。 例えばCarクラスのヘッダーファイルは Car.hhCar.hCar.H等といった名前で提供されます。 それをプログラムの先頭部分で通常読み込みます。
#include <iostream>
#include <Car.hh>
一行目のiostreamもヘッダーファイルです。 あとで述べる入出力関係に利用するクラスの定義が行われています。
ライブラリが「クラスリファレンス」を提供しているのであれば、 そちらで調べるのがより簡単です。
例えば ROOTクラスのリファレンス は公開されています。 利用可能なクラスのメソッドを簡単に確認する事ができます。 ここでは画面やファイルへの「入出力」について説明します。 C++では数字、テキスト、オブジェクトデーター等を画面などへの出力や、 コマンドライン等からの入力を「入出力ストリーム」という方法で 統一しています。画面(テキストコンソール)も、テキストファイルも、 その他のデバイスも、データーを入出力するという意味では同じ振る舞いを するので、入出力部分を共通化する事で、汎用性を実現できます。 細かい話は、別途ウェブや本で調べてください。
#include <iostream>
int main( int argc, char* argv[] ){
  cout << "Hello world!!" << endl; 標準出力にデータを書き出す
  return 0;
}
プログラム中で現在時刻を得る方法
extern "C" {
#include <sys/time.h>
}
...
  struct timeval a;  // 時間データー変数
  if( gettimeofday( &a, NULL ) == -1 ) { // 時間データーの取得
    cerr << "Failed to get localtime." << endl;
    ... // エラー処理 
  }

  cout << "経過秒: " << a.tv_sec << endl;

時間情報を格納するための変数をtimeval構造体を 利用して作成します。変数に現在の時刻情報を取得するために gettimeofday関数を利用します。 timeval構造体のtv_sec メンバー変数には 1970年1月1日00:00:00 UTCからの経過時間が書き込まれます。 プログラム中で経過時間を確認する場合は、その都度 gettimeofday関数を呼び出し、時間情報変数の内容を更新してください。
0x00000
0x10001
0x20010
0x30011
0x40100
0x50101
0x60110
0x70111
0x81000
0x91001
0xa1010
0xb1011
0xc1100
0xd1101
0xe1110
0xf1111

プログラム中で16進数表記を使うことがたまにあります。 ハードウェアのコントロールや、生データーの解析でもしないと なかなかそういう場面には出くわさないかもしれませんが、 どういうものか知っておく方がよいでしょう。

プログラム中で16進数で数字を取り扱う場合は、数字の前に 0xをつけます。16進数は基数が 16個必要なので、0から9に加え、a, b, c, d, e, fを つかって、一つの桁を表現します。

左に 0x0~0xf までの16進数と、それに対応する2進数表記を 列記しました。 0xf は10進数では15です。 これは8+4+2+1ということで、2進数表記では1111になります。 つまり「すべてが1になる」という訳です。

すべてがFになる」 は個人的「このミステリーがすごい」には ぜひ入れたい名作ですが、読み始める前に予習が必要ですね。 かつての理系学生なら多分ハマるような気がするのだけど、 最近は16進数表示なんてあまり扱わないからそうでもないのかなぁ。