[명품C++Programming] 4장 연습 문제
>>연습문제 1
1)Rect 클래스에 대한 포인터 변수 p를 선언
Rect *p;
2)선언된 포인터 변수 p에 객체 r의 주소를 지정하라
p =&r;
3)포인터 변수 p를 통해 객체 r의 폭과 높이를 출력하라
cout << p->getWidth() << endl;
cout << (*p).getWidth() << endl;
>>연습문제2
사용자로부터 폭과 높이 값을 입력받아 동적으로 Rect 객체 생성 및 면적 구하기
1) q = new Rect(w, h);
2) cout << (*q).getArea();
3) delete q;
>>연습문제3
기본 생성자가 없기에 오류 발생
>>연습문제4
Rect();
>>연습문제5
for(int i=0; i<5; i++){
cout << r->getArea() << endl;
r++;
}
>>연습문제6
4) c->getVolume();은 객체이므로 다음과 같이 존재
>>연습문제7
4) delete는 동적할당 시에만 사용 가능
>>연습문제8
기본생성자
기본생성자
기본생성자
소멸자
소멸자
소멸자
>>연습문제9
new와 delete는 기본 연산자다
>>연습문제10
배열을 통해 동적할당을 하게되면, delete를 할때도 배열을 delete해줘야한다
delete [] p;
>>연습문제 11
static멤버 함수에서는 this를 사용할 수 없다
>>연습문제 12
this는 생성자에서 사용한다
>>연습문제 13
원래 코드
class Location{
int width, height;
public:
Location(){ width = height = 0;}
Location(int w, int h){
width = w; height = h;
}
void show();
};
void Location :: show()P
cout << width << height << endl;
}
class Location{
int width, height;
public:
Location(){this->width = this->height = 0;}
Location(int w, int h){
this->width = w;
this->height = h;
}
void show();
};
void Location :: show()P
cout << this->width << this->height << endl;
}
>>연습문제 14
메모리 누수란?
필요하지 않은 메모리를 계속 점유하고 있는 현상
자바는 가비지 컬렉터가 자동으로 해제해주지만, c++은 없으니까 잊지말고 delete를 통해 해제해주자
>>연습문제 15
void f(){
char *p = new char[10];
strcpy(p, "abc");
}
(1)new를 통해 동적할당을 했으니, delete를 통해 해제해주지 않으면 메모리 누수가 발생한다.
void f(){
int *p = new int;
int *q = p;
delete q;
}
(2) 메모리 누수 발생 x
int f(){
int n[10]={0};
return n[0];
}
(3) 배열을 동적으로 생성한 것이 아니기 때문에 누수 발생 x
void f(){
int *p;
for(int i=0; i<5; i++){
p = new int;
cin >> *p;
if(*p % 2 == 1) break;
}
delete p;
}
(4)결과에 상관없이 for문이 행해질때마다 메모리누수가 발생
>>연습문제 16
(1)
<string>
>>연습문제 17
stoi
>>연습문제 18
(4)
string 클래스는 c++표준이며, 표준 라이브러리에 들어있다.
string 헤더 파일에 선언돼있다.
문자열의 길이에 따라 문자열을 저장하는 내부 메모리를 자동적으로 조절하므로 사용하기 편하다.
getline() 전역 함수를 통해 공백 문자를 포함하는 문자열을 입력받을 수 있다.