ユーザーにいくつかのコンストラクターを提供するc ++のヘッダーファイルがあります(これは必須です):
#ifndef IMANDEL_H_
#define IMANDEL_H_
class IMandel{
public:
IMandel();
IMandel(int aWidth, int aLength);
IMandel(int threads, int aWidth, int aLength);
//other stuff!
private:
int max_iterations, thread_count, height, width;
int* buffer;
};
#endif
したがって、対応する cpp ファイルでは、これらのコンストラクターをそれぞれ実装しています。
//default constructor
IMandel::IMandel(){
height = 10000;
width = 10000;
//this code segements gets repeated in every constructor! Messy!
max_iterations = 255;
thread_count = 1;
buffer = new int[width*height];
}
IMandel::IMandel(int aWidth, int aLength){
width = aWidth;
height = aLength;
//this code segements gets repeated in every constructor! Messy!
max_iterations = 255;
thread_count = 1;
buffer = new int[width*height];
}
IMandel::IMandel(int threads, int aWidth, int aLength){
thread_count = threads;
width = aWidth;
height = aLength;
//this code segements gets repeated in every constructor! Messy!
max_iterations = 255;
buffer = new int[width*height];
}
ご覧のとおり、私のコンストラクターは正常ではありません。どこでもコードのチャンクが繰り返されています。これはひどいことです。
Java では、コンストラクターを使用して相互に呼び出すことで、この問題の解決策を見つけました。基本的に、次のようなコンストラクターを再利用します (Java の例)。
public myClass(){
this(1, 10000, 10000);
}
public myClass(int aWidth, int aLength){
this(1, aWidth, aLentgh);
}
public myClass(int threads, int aWidth, int aLength){
thread_count = threads;
width = aWidth;
height = aLength;
max_iterations = 255;
buffer = new int[width*height];
}
この Java の例でわかるように、さまざまなコンストラクター間でコードが繰り返されていません。質問:
- C++ でこれと同じ効果を達成する方法はありますか?
- もしそうなら、どのように?サンプルを提供できますか?
- そうでない場合、問題を解決するためにどのような解決策をお勧めしますか?