C++에서 기본클래스의 생성자에서는 순수가상함수를 호출할 수 없다!?

다소 황당하기도 하고, 언젠가 책에서 본것같기도 한 내용입니다. 하지만 저는 당연이 되리라 생각했던지라… 왜 않되냐며 약간 열 받기도 하였습니다. 어떤 내용인냐면…

먼저 Base라는 클래스가 있고, 이 클래스는 A라는 순수 가상 함수가 있습니다.

class Base {
public:
	Base() { };

	void TTT() {
		A();
	}

public:
	virtual void A() = 0;
};

보시면 TTT라는 함수에서 A 함수를 호출하고 있구요. 이제 Base를 상속받는 Derv라는 함수를 정의해 봅니다.

class Derv : public Base {
public:
	virtual void A() {
		printf("impl");
	}
};

상속받는 클래스는 기본 클래스의 순수 가상 함수를 구현해야할 책임이 있으므로 A 함수를 구현합니다. 이제 Base 함수를 사용해 보면…

int _tmain(int argc, _TCHAR* argv[])
{
	Base *p = new Derv();

	p->TTT();

	delete p;

	return 0;
}

화면상에 “impl”이라는 문자가 찍힙니다. 잘됩니다. 그렇다면 Base 클래스를 아래처럼 수정합니다.

class Base {
public:
	Base() { A(); };

	void TTT() {
		A();
	}

public:
	virtual void A() = 0;
};

변경된 부분은 Base의 생성자에서 순사 가상 함수를 호출하고 있습니다. 실행해보면… 않됩니다. Base::A(void) 외부 기호를 확인할 수 없다는 경고입니다. 원래 C++ 표준도 않되는 것인지.. 아니면 MS의 C++ 만 않되는 것인지는 모르겠지만, 당연히 될줄알고 사용했던지라 매우 난감했습니다. 아무튼 않되는 것을 알았으니 돌아가야겠습니다.

밀도계산 in ArcGIS

밀도계산의 방식은 Simple 방식과 Kernel 방식이 있습니다. 이 두방식에 대해 ArcGIS에서 처리된 결과 이미지는 아래와 같습니다. 첫번째는 Kernel 방식이고 두번째가 Simple 방식입니다. Simple 방식은 Kernel 방식에 비해 처리 속도가 매우 빠르지만 그 결과는 Kernel에 비해  떨어집니다. 물론 분석 대상이 되는 Point나 Polyline의 개수가 증가할 수록 그 결과의 차이는 줄어들것으로 생각됩니다. XGE에서 밀도계산 기능을 확장단위로 개발하기에 앞서 비교 기준이 되는 결과를 ArcMap에서 살펴봅니다.

밀도 개산의 가장 많은 활용처는 포인트나 폴리라인에 대해 어느 부분에 밀집되어져 있느냐를 시각적으로 효과적으로 파악할 수 있다는 점입니다. 또한 이러한 밀도 개산에 의해 생성된 Grid 데이터를 여러개를 동시에 중첩하여 여러개의 인자들에 대한 복합적인 분석에 매우 효과적으로 활용됩니다. XGE에서는 ArcGIS의 밀도 분석은 물론이고 시각적으로 어느 부분이 가장 밀집도가 높으냐라는 판단이 아니라, 정확히 이 부분이 가장 밀집도가 높다라는 “제시”까지 제공할 예정입니다. “제시”는 기본이 되는 밀도개산 기능이 잘 완료가 되면 쉽게 구현할것으로 판단됩니다.