본문 바로가기
교재 및 CS공부/명품C++Programming

[명품C++Programming] 4장 연습 문제

by veganwithbacon 2023. 5. 2.
반응형

>>연습문제 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() 전역 함수를 통해 공백 문자를 포함하는 문자열을 입력받을 수 있다.

 

 

반응형

댓글