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

目次

公開時期

1983年

概要

  • AT&Tベル研究所のBjarne Stroustrup(ビャーネ・ストロヴストルップ)により開発された
  • C言語をベースに、Simulaのクラス機能を追加したプログラミング言語
  • C++の言語仕様はC言語の上位互換になっている
  • 言語開発中の名前はC With Classes

言語仕様

クラスの宣言

class MyClass
{
};
 

クラスの継承

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