CSE207 객체지향 강좌 및 C++ 관련, 누구나 묻고 답하는 게시판 입니다. CSE207 수강생이 아니여도 편안하게 질문하세요. 첨부화일은 이미지 화일 혹은 zip 화일로 업로드 하기를 권합니다. 제목동적할당으로 생성한 객체의 배열 delete2019-05-13 01:57작성자우미안녕하세요 교수님. 동적할당으로 생성한 객체에 대한 동적배열의 delete 관련하여 질문이 있습니다.Polygon class가 있고그것을 상속받는 Triangle,Rectangle, Circle 클래스가 있습니다.그리고 각각 넓이 및 둘레에 대한 함수를 오버라이딩하기도 하였습니다.요점은 vector을 쓰지 않았을 때 dynamic binding을 이용하려면 포인터로 객체를 가리켜야하잖아요.그래서 new 를 통해 생성한 뒤 포인터로 받고 싶은데 그러기위해Polygon 포인터의 배열을 생성했습니다 예를들어Polygon * parr[3];근데 이 parr에 대한 소멸을 시키려면각 칸에 있는 포인터에대한 객체를 소멸시켜주고,parr 배열 자체를 소멸시키면 되는 것 같은데 왜 안되는 지 모르겠네요.(참고한 답변 : https://stackoverflow.com/questions/20303820/creation-of-dynamic-array-of-dynamic-objects-in-c의 가장 위 답변 ) for (int i = 0; i < 3; i++) { delete[] parr[i]; } //delete[] parr; //<<<<----이 줄이 안 됨...전체 코드 올려봅니다#include #include #include using namespace std; class Polygon { protected: int number; float length; public: Polygon() {} Polygon(int number, float length):number(number), length(length) { cout << number << "각형 생성" << endl; } virtual float getRound() { return number * length; } virtual float getArea() { cout << "ERROR : needs to be overriden" << endl; return -1; } void showInfo() //유용하게 쓸 것임. { cout << "======================" << endl; cout << "NUMBER : " << number << endl; cout << "LENGTH : " << length << endl; cout << "ROUND : " << getRound() << endl; cout << "AREA : " << getArea() << endl; cout << "======================" << endl; } }; class Triangle :public Polygon { public: Triangle(int number, float length) :Polygon(number, length) { } //float getRound() override() //여기선 override 할 필요가 읎어 //override 붙이든 말든 오류 안 남 float getArea() override { return length * length*sin(3.14 / 3) / 2; } }; class Rectangle :public Polygon { public : Rectangle(int number, float length) :Polygon(number, length) {} //float getRound() override //마찬가지 override 할 필요가 읎어 float getArea() //여기선 override 안 붙여봄 { return length * length; } }; class Circle : public Polygon { public: Circle( float length) :Polygon(0, length) {} float getRound() override { return 2 * length*3.14; } //이번엔 둘레도 override 해야돼! float getArea() { return length * length*3.14; } }; int main() { cout << "3각형 4각형 원에 대한 연산을 하는 프로그램을 작성해보겠습니다."<>>"; cin >> number >> length; switch (number) { case 0: { parr[i] = new Circle(length); break; } case 3: { parr[i] = new Triangle(number, length); break; } case 4: { parr[i] = new Rectangle(number, length); break; } default: { cout << "ERROR : wrong input" << endl; i--; break; } } } //각 도형들의 정보를 출력해주는 부분 //여기서 dynamic binding과 override의 효과를 볼 수 있다. for (int i = 0; i < 3; i++) { parr[i]->showInfo(); } //소멸자부분은 잘 모르겠다... //스택오버플로상의 방법 //https://stackoverflow.com/questions/20303820/creation-of-dynamic-array-of-dynamic-objects-in-c for (int i = 0; i < 3; i++) { delete[] parr[i]; } //delete[] parr; //<<<<----이 줄이 안 됨... };> 목록수정삭제답변글쓰기 댓글 [2] 댓글작성자(*)비밀번호(*)내용(*) 댓글 등록 더보기이전배열 및 포인터의 delete 관련하여우미2019-05-14다음const...수강생2019-05-12 Powered by MangBoard | 워드프레스 쇼핑몰 망보드