서론
object oriented programming
메모리 관리는 중요한 문제
프로그램이 실행되려면, 모든 변수의 주소값이 확정되어야 한다.
이런 문제를 해결하기 위해 'heap' 공간이 생겼다.
프로그램 실행시에 자유롭게 할당/해제할 수 있는 공간이다.
heap은 stack에 비해 안정성이 떨어진다.
C에서와 같이
힙에서의 메모리 할당을 위해
malloc, free 함수를 이용할 수 있다.
C++에서는 이외에도
malloc에 대응하는 new와
delete에 대응하는 free를 사용할 수 있다.
new와 free 사용법
<new syntax>
type *pointer = new type;
<free syntax>
delete pointer;
#include <iostream>
int main() {
int *p = new int;
// new int -> sizeof(int)만큼의 공간을 할당한다.
// int *p = -> 그 공간의 주소값을 p에 집어 넣음
*p = 10;
std::cout << *p << std::endl;
delete p;
return 0;
}
int *p = new int;
new int -> sizeof(int)만큼의 공간(heap)을 할당한다
int *p = new int; -> 해당 주소값을 p에 대입한다.
new로 배열 할당하기
#include <iostream>
int main(){
int arr_size;
std::cout<<"array_size";
std::cin >> arr_size;
int *list = new int[arr_size];
for (int i = 0;i<arr_size;i++){
std::cout<< i << " th element";
std::cin >> *(list + i);
}
for (int j = 0; j < arr_size; j++){
std::cout << *(list+j) << std::endl;
}
delete[] list;
return 0;
}
돌아온 마이펫
switch 이용한 표현
#include <iostream>
typedef struct Animal {
char name[30];
int age;
int health;
int food;
int clean;
} Animal;
void create_animal(Animal *animal){
std::cout<<"name : ";
std::cin >> animal->name;
std::cout<<"age : ";
std::cin >> animal->age;
animal->health = 100;
animal->food = 100;
animal->clean = 100;
}
void play(Animal *animal){
animal->health += 10;
animal->food -= 20;
animal->clean -= 30;
}
void one_day_pass(Animal *animal){
animal->health -= 10;
animal->food -= 30;
animal->clean -= 20;
}
void show_stat(Animal *animal){
std::cout << "name : " << animal->name << std::endl;
std::cout << "health : " << animal->health << std::endl;
std::cout << "food : " << animal->food << std::endl;
std::cout << "clean : " << animal->clean << std::endl;
}
int main(){
int animal_num = 0;
Animal *list[10];
while (1) {
std::cout << "1. 동물 추가하기 " << std::endl;
std::cout << "2. 놀아주기 " << std::endl;
std::cout << "3. 상태 보기" << std::endl;
std::cout << "4. 끝" << std::endl;
int input;
std::cin >> input;
if (input==4){
break;
}
switch(input){
int play_with;
case 1:
list[animal_num] = new Animal;
create_animal(list[animal_num]);
animal_num++;
break;
case 2:
std::cout << "who?";
std::cin >> play_with;
if (play_with < animal_num){
play(list[play_with]);
}
break;
case 3:
std::cout <<"who?";
std::cin >> play_with;
if (play_with < animal_num){
show_stat(list[play_with]);
}
break;
}
for (int i = 0; i != animal_num; i++){
one_day_pass(list[i]);
}
}
for (int i = 0; i != animal_num; i++){
delete list[i];
}
return 0;
}
** 구조체 복습 필요함 **
객체 지향 프로그래밍의 필요성
(1)
위 코드에서는
main함수에서
void show_stat이라는 함수를 호출하고
show_stat에서 구조체에 접근했다
만약,
구조체 자체에 함수가 있고
각 구조체 변수가 자신의 함수가 있으면 어떨까?
(ex - list[play_with]->play())
다음 강의 예고
<4. 객체로 이루어진 C++>
- 객체 지향 프로그래밍의 도래 -
- 객체란? 클래스란? -
- 접근 지시자 public, private -
'Computer Science > C++' 카테고리의 다른 글
[C++] 클래스 / 함수의 오버로딩, 생성자 - 씹어먹는 C++ (0) | 2021.07.21 |
---|---|
[C++] 객체 지향 프로그래밍, 클래스, 접근 지시자 - 씹어먹는 C++ 4강 (0) | 2021.07.19 |
[C++] 참조자(레퍼런스)의 도입 - 씹어먹는 C++ 2강 (0) | 2021.07.17 |
[C++] C와 C++의 공통점 (if, while, for, switch) 씹어먹는 C++ 1-3강 (0) | 2021.07.17 |
[C++] 첫 C++ 프로그램 분석하기 - 씹어먹는 C++ 1-2강 (0) | 2021.07.17 |