最終更新:2013-01-18 (金) 06:45:44 (4117d)  

C++
Top / C++

C言語オブジェクト指向に関する機能を追加した言語

特徴

基本データ型

標準規格

標準入出力

  • 入力ストリーム? cin
  • 出力ストリーム? cout
#include <iostream>
cin >> i
cout << i << endl;
cerr
clog
//入力はスペースで区切られる

C++/マニピュレータ

C++/標準ライブラリ

C++/文字列

C++/キーワード

C++/文法?

C++/C言語との違い

宣言?定義?

  • 宣言:名前や型をコンパイラに知らせる
  • 定義:名前をつけたものの実体を確保する。メモリを割り当てたり、関数のコード生成を行う。

C++/変数

false=0
true!=0

//変数の初期化
int num = 100;
int num(100);
p = new int(100);
 

C++/配列?

#include <iostream>
int main()
{
	int *p;
	int i;
	p = new int[10];  // int型10個分の領域を動的確保
	for(i=0; i<10; ++i)
	{
		p[i] = i;
		std::cout << p[i] << std::endl;
	}
	delete [] p;       // 動的に確保した領域を解放
	return 0;
}

C++/クラス

//クラスの宣言
class myClass{
private:
	int a;
public:
	//インスタンス化時に実行される
	myClass();//コンストラクタ
	~myClass();//デストラクタ
	int get_a();
	void set_a(int num);
}

//実装
void myClass::set_a(int num){

}

//呼び出し
int main(){
	myClass ob1;
	ob1.get_a();
	return 0;
}
 
  • C++の構造体には関数を含めることができる
  • アクセス指定子を省略すると、デフォルトの指定子が使われるわけですが、この部分にクラスと 構造体の唯一の違いがあります。
    • クラスの場合のデフォルトの指定子はprivate
    • 構造体の場合はデフォルトでpublic

インスタンス化

//書き方は同じ
myclass ob = myclass(3);
myclass ob(3);

myclass ob(120);
myclass *p;//ポインタを宣言
p=&ob;//アドレスを取得

myclass *p;
p = new myclass(12);

ob.get();//オブジェクトからのときは.
p->get();//ポインタからのときは->
 

インターフェイス

class IPen
{
public:
	// 線を描く
	virtual void DrawLine(int sx, int sy, int ex, int ey) = 0;
};
  • 末尾に=0をつけると関数の定義が無視されるので直接インスタンス化できない

構造体

struct タイプ名{
	//公開
private:
	//非公開
}object-list;

//共用体?
//インライン関数
inline int even(int x){
	return !(x%2);
}
//マクロ展開



//オブジェクトの代入はdeep copy
ob1=ob2;


malloc/freenew/delete

用語

  • 多重継承
  • 仮想基本クラス
  • 入出力マニピュレータ
  • 仮想関数
  • STL
    • コンテナ
    • アルゴリズム
    • 反復子
  • stringクラス(wstring)
  • Cstring(\0)

名前空間

namespace hoge
{
	int num;    // hoge::num
}

//使うとき
a=hoge::num;
//もしくは
using namespace hoge;
a=num;
 

参照渡し

//ポインタ渡し
void func(CSample* s)
{
	s->member = 100;//アロー演算子
}
//参照渡し
void func(CSample& s)
{
	s.member = 100;//ドット演算子
}

ライブラリ

ライブラリ(C)

  • SDL - Simple DirectMedia? Layer

参考