일부 정적 데이터로 클래스를 만들었습니다. 이런 식으로 뭔가 :벡터가 제대로 객체를 생성하지 않습니다.
class Object
{
public:
Object();
Object(Point center, double area);
Object(int cx, int cy, double area);
~Object();
//and other public stuffs here...
private:
Point center;
double area;
static double totalArea;
static int objCounter;
static double areaMean;
};
을 그것의 생성자와 소멸자보다가 내가 만든 :
Object::Object()
{
this->setCenter(Point());
this->setArea(0.0);
objCounter++;
totalArea += 0;
areaMean = totalArea/objCounter;
}
/*this is just the default constructor I
have two others that increment real area, not 0*/
Object::~Object()
{
//cout << "Destructor called!\n"; //put it just to test
objCounter--;
totalArea -= this->area;
areaMean = totalArea/objCounter;
}
그래서 내 의도가 만든 얼마나 많은 객체 알고 있었다, 그것은 전체 면적과 평균 영역이다.
Object first;
Object second;
cout << Object::getObjCounter() << "\n";
///I have the get method implement origanally
그리고 모든 것이 괜찮아 : 나는 간단한 같은 문장으로 테스트. 객체 클래스 수는 스태틱의 수를 올바르게 나타냅니다. 간단한 배열을 사용하여 테스트했습니다 :
Object test[ 10 ];
cout << Object::getObjCounter() << "\n";
놀라운 ... 그것은 작동합니다. 동적 할당 테스트 :
Object *test = new Object[ 10 ];
cout << Object::getObjCounter() << "\n";
delete [] test;
다시 ... 작동합니다. 그러나 내가하려고하면 그것은 나에게 표준 출력 제로를 제공
vector<Object> test(10, Object());
cout << Object::getObjCounter() << "\n";
... 나는 그것이 일어나는 이유를 생성자와 소멸자에 플래그를 넣어. 그리고 그것은 내가 벡터 문을 사용할 때, 생성자가 소멸자가 순차적으로 호출되는 것보다 단지 호출된다는 것을 보여줍니다 !!!! 왜???? 나에게 이해가 가지 않는다! 아무도 나에게 이것을 설명 할 수 있 었는가? 또한, 누구든지 벡터를 사용하여 단순한 배열과 동일한 효과를 얻을 수있게 도와 줄 수 있습니다. 즉, 무언가 안에 많은 개체가 있고 올바르게 계산하고 있습니까? 것은 요소 제거 및 추가, 크기 조정과 같은 벡터 기능이 필요하지만 휠을 재발견하고 싶지는 않습니다. 미리 감사드립니다.
벡터 생성자가 벡터 생성자를 복사 생성합니다. 'Object()'인수도 필요 없습니다. – chris
기본 생성자에서'totalArea + = 0;'을 수행하는 점은 무엇입니까? – Blastfurnace
Object()는 단지 기본 생성자입니다. 저는 totalArea + = 0에 효과적인 생성자와 비슷한 코드를 넣었습니다. –