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; } } }}