我在 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++ 中实现同样的效果?
- 如果有怎么办?你能提供一个样品吗?
- 如果不是,您推荐什么解决方案来解决这个问题?