「C++とは」の編集履歴(バックアップ)一覧に戻る

C++とは - (2008/12/14 (日) 02:41:51) のソース

C++(シープラスプラス)は、C言語をベースに、オブジェクト指向等の機能を追加した言語です。

&bold(){目次}
#contents()
*公開時期
1983年
*概要
-AT&Tベル研究所のBjarne Stroustrup(ビャーネ・ストロヴストルップ)により開発された
-C言語をベースに、Simulaのクラス機能を追加したプログラミング言語
-C++の言語仕様はC言語の上位互換になっている
-言語開発中の名前はC With Classes
*言語仕様
**クラスの宣言
#highlight(cpp){{
class MyClass
{
};
}}
**クラスの継承
#highlight(cpp){{
class Base
{
};

class MyClass : Base
{
};
}}
**クラスの多重継承
#highlight(cpp){{
class Base1
{
public:
	void Func()
	{
	}
};

class Base2
{
public:
	void Func()
	{
	}
};

class MyClass : public Base1,public Base2
{
};

void main()
{
	MyClass* pmc = new MyClass();

	//あいまいさの解決にはスコープ演算子::を使用する
	pmc->Base1::Func();
	pmc->Base2::Func();

	//以下はコンパイルエラーとなる
	//pmc->Func();	

	delete pmc;
}
}}
**仮想基本クラス
#highlight(cpp){{
class Base1
{
public:
	void Func()
	{
	}
};

//virtualをつけ仮想基本クラスとしてBase1を継承
class Base2 : virtual public Base1
{
};

//virtualをつけ仮想基本クラスとしてBase1を継承
class Base3 : virtual public Base1
{
};
 
class MyClass : public Base2 , public Base3
{
};
 
void main()
{
	MyClass* pmc = new MyClass();
	//virtualがないと以下はコンパイルエラーとなる
	pmc->Func();
 
	delete pmc;
}
}}
**抽象クラス
#highlight(cpp){{
//抽象クラス
class AbstractClass
{
public:
	//純粋仮想関数
	virtual void func() = 0;
};

class MyClass : AbstractClass
{
public:
	void func()
	{
	}
};

void main(){
	MyClass* pmc = new MyClass();
	pmc->func();
	delete pmc;

	//抽象クラスはインスタンス生成出来ない
	//AbstractClass* pac = new AbstractClass();
}
}}
**コンストラクタ、デストラクタ
#highlight(cpp){{
class MyClass
{
public:
	//コンストラクタの宣言
	MyClass();
	//デストラクタの宣言
	~MyClass();
};

//コンストラクタの定義
MyClass::MyClass()
{
}

//デストラクタの定義
MyClass::~MyClass()
{
}
}}
**オブジェクトの生成
#highlight(cpp){{
class MyClass
{
public:
	MyClass();
	~MyClass();
	void Func();
};

MyClass::MyClass()
{
}

MyClass::~MyClass()
{
}

void MyClass::Func()
{
}

void main()
{
	//静的確保
	//確保時にコンストラクタが呼ばれ、スコープを抜けた時にデストラクタが呼ばれる
	MyClass mc;
	mc.Func();

	//動的確保
	//確保時にコンストラクタが呼ばれ、deleteでデストラクタが呼ばれる
	MyClass *pmc = new MyClass();
	pmc->Func();
	delete pmc;
}
}}
**関数のオーバーライド
#highlight(cpp){{
class base
{
public:
	//仮想関数
	virtual void Func()
	{
	}
};

class MyClass : public base
{
public:
	void Func()
	{
	}
};
}}
**関数のオーバーロード
#highlight(cpp){{
class MyClass
{
public:
	void Func(int x)
	{
	}
	void Func(int x,int y)
	{
	}
};
}}
**テンプレート関数
#highlight(cpp){{
#include<iostream>
using namespace std;

template<typename T> T Add(T x,T y)
{
	return x + y;
}

void main()
{
	//int Add(int,int)となる
	cout << Add(1,2);
	
	//double Add(double,double)となる
	cout << Add(1.1,1.2);

	//コンパイルエラー
	//cout << Add(1,1.1);

	//double Add(double,double)となる
	cout << Add<double>(1.1,1);
}
}}
**テンプレートクラス
#highlight(cpp){{
#include<iostream>
using namespace std;

template<typename T> class MyClass
{
public:
	T Add(T x,T y)
	{
		return x + y;
	}
};
 
void main()
{
	MyClass<int> myInt;

	//int Add(int,int)となる
	cout << myInt.Add(1,2);
 
	MyClass<double> myDouble;

	//double Add(double,double)となる
	cout << myDouble.Add(1.1,1);
}
}}
**例外処理
#highlight(cpp){{
#include<iostream>
using namespace std;

void main()
{
	try
	{
		//例外を監視するブロック

		throw "Exception";	//例外の発生
	}
	catch(char *str)
	{
		//例外時の処理を記述するブロック

		cout << str;
	}
}
}}