C++ Basic 01

김여울·2025년 6월 12일
0

내일배움캠프

목록 보기
20/114

화요일, 목요일 2시간 동안 Basic반 수업을 듣는다.
문법 강의를 보면서 이해했다고 생각했는데 수업을 들으니까 제대로 이해했던 게 아니라는 생각이 강하게 들었다...

함수

먼저 가장 기초인 함수는 이렇게 선언(정의)한다.

반환자료형 함수명(매개변수자료형 매개변수명)
{
	return 반환값;
}

선언한 함수들은 main함수 안에서 호출한다.

int main()
{
	int num = 7;	// 자료형 변수명 = 값;
    
    함수명(인자값);	// <- 여기서 만들어놨던 함수들 호출(call)
}

C++ 안에서 기본구조는 대개 <자료형 변수명 = 값;> 이다.
이건 포인터(메모리 주소를 저장하는 변수)에서도 적용된다.

포인터

자료형* 변수명 = &메모리주소값;
Animal* animal = &메모리주소값;
Animal* myCat = new Animal();

pointer to Animal 타입의 animal이란 변수이다.
이렇게 포인터를 활용하면 포인터에 저장된 메모리 주소로 가면 된다.

메모리의 구조

📎 메모리의 구조

메모리 공간은 4가지로 나뉜다.
앞에 붙은 숫자가 커질수록 높은 주소이다.

1️⃣ Code

  • 함수의 코드들이 들어 있다

2️⃣ Data

  • 전역변수, 정적 변수가 저장된다
    → 전역변수는 다른 함수 내에서, main 함수 내에서 사용 가능
  • 프로그램이 종료되면 소멸
  • speak(), Move() 같은 클래스의 기능들도 여기
speak()
{
	cout << "멍" << endl;
}

3️⃣ Heap

  • 동적으로 생성된 객체들
  • 크기가 엄청 크다
  • 메모리의 낮은 주소 → 높은 주소 방향으로 할당됨
  • 동적할당
    → 메모리의 생명주기를 "프로그래머"가 결정할 수 있음
    → 직접 delete로 데이터 삭제시켜야 함

4️⃣ Stack

  • 컴파일 시에 결정해야 함
  • 크기가 작음
  • push, pop으로 데이터를 넣고 뺌
  • 후입선출
  • 메모리의 높은 주소 → 낮은 주소 방향으로 할당됨
  • 함수가 종료되면 스택메모리에 접근할 수 없음
    → 함수의 호출은 곧 하나의 스택 자료구조의 생성
    → 스택 메모리에 저장하면 금방 사라질 수도 있음
  • 함수 호출 비용을 극적으로 줄여줌
//main.cpp

int Array01[10];	// Array01은 데이터 섹션 <- 함수 스코프 밖

void addAnimal()
{
	int Array02[10];	// Array02는 스택 메모리 <- 함수 스코프 안

	int* PtrToData = (int*)(malloc(sizeof(int), 7));	// 힙 메모리
    // malloc : memory allocation  
    // 📌 PtrToData 변수는 스택에 있고 포인터에 저장된 주소는 힙에 있음
}

추상클래스와 자식클래스

추상클래스는 인스턴스를 만들 수 없고 다른 클래스가 상속받아 필요한 메서드를 구현해야만 사용할 수 있다.
상속을 받은 자식 클래스는 추상클래스에서 정의한 추상 메서드들을 반드시 구현해야 한다.



가상 함수 & 순수 가상 함수

  • 가상 함수

    • 추상 클래스에서 선언만 하고, 자식 클래스에서 정의한다
    • 자식 클래스에서 반드시 정의할 필요는 없다
  • 순수 가상 함수

    • 추상 클래스에서 선언할 때 = 0을 사용해 정의함
    • 순수 가상 함수가 포함된 부모 클래스는 추상 클래스가 된다
    • <강제> 자식 클래스에서 반드시 이 함수를 구현해야 한다
    • 구현하지 않으면 자식 클래스도 추상 클래스가 되어 인스턴스를 만들 수 없다
    • 자식 클래스는 순수 가상 함수를 반드시 오버라이딩해야만 인스턴스를 생성할 수 있다

0개의 댓글