■ポリフォーフィズム-----------------------------------------------

class a{
public :
	virtual char * out(int)=0;
};

class b : public a{
public :
	char * out(int a){
		return "bです";
	}
};

class c : public a{
public :
	char * out(int a){
		return "cです";
	}
};

void CtestDlg::OnButton1() 
{
a *test[2];
test[0]=new b();
test[1]=new c();

TRACE(test[0]->out(1));
TRACE(test[1]->out(1));
}
結果 bですcです

■オーバーライド-----------------------------------------------

class a{
public :
	char * out(int){
		return "aです";
	}
};

class b : public a{
public :
	char * out(int a){
		char * str=a::out(1);//元のメソッドの読み出し
		return str;
	}
};

class c : public a{
public :
	char * out(int a){//オーバーライド
		return "cです";
	}
};

void CtestDlg::OnButton1() 
{
b *test;
test=new b();
TRACE(test->out(1));

c *test2=new c();
TRACE(test2->out(1));
}

結果 aですcです

■オーバーロード-----------------------------------------------

同じメソッド名でも、引数リストの異なるものは、別のものとして扱われるという事です。

■例外処理-----------------------------------------------

#include <stdio.h>

//例外クラス
class ExceptionA{
	public :
		void print(){
			printf("Aです\n");
		}
};

//例外クラス
class ExceptionB{
	public :
		void print(){
			printf("Bです\n");
		}
};

//例外クラス
class ExceptionC{};

//例外を発生させるメソッド
void throwExcep(){
	throw ExceptionA();//例外をスローする
}

int main(){
	try{
		throwExcep();//例外を発生させるメソッドを呼び出す
	}catch(ExceptionA exc){
		printf("例外ExceptionAをキャッチ\n");
		exc.print();
	}catch(ExceptionB exc){
		printf("例外ExceptionBをキャッチ\n");
		exc.print();
	}catch(...){
		printf("その他すべての例外をキャッチ\n");
	}
	return 0;
}

処理結果
例外ExceptionAをキャッチ
Aです



▲トップページ > Windows と C++