C++(シープラスプラス)は、C言語をベースに、オブジェクト指向等の機能を追加した言語です。
目次
公開時期
1983年
概要
- AT&Tベル研究所のBjarne Stroustrup(ビャーネ・ストロヴストルップ)により開発された
- C言語をベースに、Simulaのクラス機能を追加したプログラミング言語
- C++の言語仕様はC言語の上位互換になっている
- 言語開発中の名前はC With Classes
言語仕様
クラスの宣言
クラスの継承
class Base
{
};
class MyClass : Base
{
};
クラスの多重継承
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;
}
仮想基本クラス
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;
}
抽象クラス
//抽象クラス
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();
}
コンストラクタ、デストラクタ
class MyClass
{
public:
//コンストラクタの宣言
MyClass();
//デストラクタの宣言
~MyClass();
};
//コンストラクタの定義
MyClass::MyClass()
{
}
//デストラクタの定義
MyClass::~MyClass()
{
}
オブジェクトの生成
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;
}
関数のオーバーライド
class base
{
public:
//仮想関数
virtual void Func()
{
}
};
class MyClass : public base
{
public:
void Func()
{
}
};
関数のオーバーロード
class MyClass
{
public:
void Func(int x)
{
}
void Func(int x,int y)
{
}
};
テンプレート関数
#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);
}
テンプレートクラス
#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);
}
例外処理
#include<iostream>
using namespace std;
void main()
{
try
{
//例外を監視するブロック
throw "Exception"; //例外の発生
}
catch(char *str)
{
//例外時の処理を記述するブロック
cout << str;
}
}
最終更新:2008年12月14日 02:41