C++

11. 클래스, 접근제어자 ,생성자 소멸자

seqw 2021. 5. 20. 23:58

1. 정적 할당과 동적 할당.

#include"MainGame.h" // #include로 헤더 선언. 기본적으로 있는 것 말고 
			//따로 만든건 <>가 아니라 ""로 표기

void main()
{
	//정적 할당.
	//런타임 도중 삭제 불가(컴파일러 이전 단계에서 메모리를 잡고 들어옴)
	// 스택 영역에 메모리 잡힘.
	MainGame mg1;
	MainGame mg2;
	MainGame mg3;
	//생성이 mg1 mg2 mg3 순으로 생성이 되는데
	//소멸도 mg1 mg2 mg3 순으로 소멸이 됨.
	//이를 후입선출,스택,LIFO(Last In First Out) 이라 함.
	//반대로 선입선출도 있는데 그걸 큐,FIFO(First in First Out) 이라 함.
    
	//동적 할당.
	//컴파일러 끝나고 메모리를 힙 영역에서 빌려옴
	//런타임 도중 삭제 가능
	//힙영역에 메모리 잡힘
	//지정 주차구역이 없어서 주차할곳 찾아다닌다 생각하면 편함
	MainGame* mg4 = new MainGame;
    
	delete mg4; //이걸로 소멸
}

2. 클래스 생성

클래스를 만들면 저렇게 헤더와 cpp가 만들어진다.

헤더에는 변수나 함수 선언을 하고 나머지는 cpp에서 하는게 좋아보임.

 

 

 

 2-1.접근제어자

Test01.h

#pragma once // #include를 사용해서 잡히는 데이터를 한번만 잡게 해준다함.
#include<iostream>

class Test01//class 이름
{
private:

	int x; // 클래스 내부에서만 사용 가능한 변수
    
protected:
	
	int i; // 클래스 내부와 상속된 자식 클래스에서만 사용 가능한 변수
    
public:
	
	void Test(); // 함수 선언
	void Test1(int i);
};

1.private: 접근제어자중에서 가장 빡쌤 외부 공개없이 내부에서만 사용 가능

2.protected: 클래스 내부와 상속된 자식 클래스에서만 사용가능

3.public: 누구나 사용가능

2-2 .

Test01.cpp

void Test01::Test()
{
	std::cout << "Hi!" << std::endl;
}

void Test01::Test1(int i)
{
	std::cout << i;
}

1. 헤더에서 #include<iostream>을 넣어서 여기엔 쓸 필요가 없음!

2-3.

main

#include<iostream>
#inlucde"Test01.h" // #include"Test01.h" Test01.h선언

void main()
{
	int i = 10;
	Test01 t; //인스턴스 생성.
    
	t.Test(); //Test01 내에 있는 void Test() 함수를 사용
	t.Test1(i); //Test01 내에 있는 void Test1(int i) 함수를 사용
}

1. 실행하면 
Hi!
10
2.이라 출력한다.
3.메인함수 위에 따로 함수 만들어서 선언해주고 하는거랑 비슷함.

 

 

 

3-1. 생성자 소멸자

Test01.h

#pragma once
#include<iostream>

class Test01
{
public:
	
	Test01();
	~Test01();
};

1. Test01(); 생성자: 객체가 생성될때 실행됨.
2. ~Test01();소멸자: 객체가 소멸될때 실행됨.

3-2. 

Test01.cpp

void Test01::Test01()
{
	std::cout << "Hi!" << std::endl;
}

void Test01::~Test01()
{
	std::cout << "Bye!" << std::endl;
}

1. 생성자와 소멸자에 각각 Hi! 와 Bey! 를 출력하게 만들었다.

3-3.

main

#include<iostream>
#inlcude"test01.h"

void main()
{
	Test01 test;
}

1. 이렇게 하면 객체가 생성되면서 생성자가 실행되어 Hi! 라고 출력한다.
2. 이후 객체가 소멸하면서 소멸자가 실행되어 Bye! 라고 출력한다.