🎀 타입과 인스턴스 타입( type)는 추상화 된 것이고 인스턴스 (instance) 는 타입을 실체화한 구체적인 실체를 의미한다. 예시로 원을 하나의 타입이라고 하고 종이 위에 여러 크기의 원을 그리면 이러한 원들이 인스턴스가 된다. 🎀 객체 지향에 필요한 클래스의 구조 새로운 자료형 (타입)을 만들때는 클래스 (class)를 사용한다. 객체 지향 프로그램에서는 타입으로 클래스를 만들고 이를 기반으로 인스턴스인 객체를 만든다. 클래스를 기반으로 인스턴스를 만드는 것을 인스턴스화 (instantiation) 라고 한다. 객체지향 프로그래밍을 할때는 1) 클래스 정의 2) 멤버 함수 정의 3) 애플리케이션 ( 클래스를 기반으로 객체를 만들어 사용하는 부분) 이 필요하다. #include using name..

✨ 동적할당 ? 프로그램을 컴파일하는 시점에 객체의 크기를 모른다면 런타임 시점에 메모리에 객체를 만들어야 한다. 힙 메모리(heap memory)는 런타임 시점에 객체를 저장할 때 사용한다. 이때의 힙메모리는 동적메모리(dynamic memory)라고 불린다. 힙메모리의 객체는 자신의 이름을 가질 수 없기 때문에 힙 메모리에 생성한 객체는 스택 메모리에 있는 포인터로 가리켜야한다. 즉, 런타임 시점에 메모리에 객체를 만드는 작업은 스택과 힙을 모두 사용하는 것이다. 동적할당 쓰이는 경우 1) 갑자기 많은 메모리를 잡아야 할 경우 : 동적할당은 필요할 때 메모리를 잡았다가 필요 없으면 바로 해당 메모리를 해지시킬 수 있기 때문에 메모리 관리에 효율적이다. 2) 함수 리턴 후에도 메모리의 할당이 남아있게 ..

🎀 Q5. 1~100 사이의 랜덤한 정수 10개를 요소로 갖는 배열을 만드세요. 이어서 원본 배열을 출력하고 배열의 최대값과 최소값을 제거한 뒤의 배열을 출력하세요. 📃 생각과정 1) 랜덤라이브러리를 활용해서 배열을 생성하고 배열을 출력해야겠다. 배열을 출력할 때는 for문을 활용하여야겠다. 2) 배열 안의 최소값과 최대값을 색출해야겠다. 이때에는 max=min=arr[0]; 으로 두고 for문을 돌려 값을 찾아야겠다. 3) 배열 안의 최소, 최대 값을 제거해야겠다. Q. 배열을 이용한 난수 발생 코드 작성 ? 랜덤함수를 사용하여 난수 생성하기 🔑 랜덤함수 예시 #include #include #include //현재 시간을 seed 값으로 두어 무작위 난수 출력 void main() { srand((u..

✨ Q2. 16진수 0012FEAC로 시작되어 0012FED0으로 끝나는 메모리 영역을 그려라. 즉, 0012FEAC로 시작하여 4를 더한 값을 적고 또 4를 더해서 적고 .. 0012FED0가 될 때까지 반복할 것 밑 코드를 그림에 나타내라. #include using namespace std; bool isEven(int y); int main() { char A[6]="GRACE"; int i=5; short s=7; double d=88.7; bool b=isEven(i); } bool isEven(int y) { bool result = (y%2 == 0); return result; } A2. 🎀 Q. 왜 한 줄의 메모리가 4byte일까 ? 16진법을 나타내기 위해서는 0 ~ F (15) 가 ..

🧰 함수 오버로딩 (function overloading) 매개변수 (매개변수의 자료형, 개수, 순서) 가 다르면 이름이 같은 함수 2개를 정의할 수 있다. 이를 함수 오버로딩이라 한다. int max(int a,int b) //max(int,int) { } double max(double a,double b) //max(double,double) { } // 따라서 두 함수는 함수 시그니처가 다르므로 같은 이름이라도 함께 정의 가능 🧰 함수 시그니쳐 (function signature) 프로그램이 같은 이름의 함수를 허용할 때, 함수들을 구분하기 위해 사용하는 기준을 함수 시그니쳐 (function signature) 라고 한다. 함수 시그니처는 매개변수들의 자료형과 조합이다. 이름이 같은 함수라도 함..

void 함수는 아무것도 리턴하지 않는다. 반면 void 함수가 아니라면, 어떤 값을 리턴해야한다. 리턴값의 종류에 따라서도 1) 값으로 리턴(return-by-value) 2) 참조로 리턴(return-by-reference) 3) 포인터로 리턴(return-by-pointer) 으로 구분할 수 있다. 🎨 값으로 리턴 : ReturnByValue 호출되는 함수 쪽에서 어떤 표현식을 생성하고 이를 리턴합니다. 함수를 호출하면 값이 리턴되므로, 값이 필요한 위치에 함수를 활용한다. 🥎 ReturnByValue 예제 1) #include using namespace std; //함수 선언 bool isEven(int y); int main() { //함수 호출 cout = 70) grade = 'C'; el..

호출되는 함수에 매개변수가 존재한다면, 함수 호출 때의 값 (argument) 이 호출되는 함수의 매개변수 (parameter)로 전달된다. 자료전달은 1) 값으로 전달 (PassByValue) 2) 참조로 전달(PassByReference) 3) 포인터로 전달(PassByPointer)의 세가지 매커니즘으로 구분한다. 🎀 값으로 전달 : Pass-By-Value PassByValue 메커니즘 에서는 인수 (argument)의 값이 복사되어 매개변수 (parameter)에 할당된다. 즉, 값을 기반으로 자료가 전달되므로 인수 (argument)는 리터럴 또는 변수의 값이 된다. 값으로 전달은 호출되는 함수 쪽에서 인수를 변경하지 않게 만들고 싶을 때 사용한다. 왜냐하면 호출되는 함수는 인수의 값을 읽기만..

🎀 문자열 VS 문자배열 char name1[6]={'G','r','a','c','e','\0'}; // name1은 문자열 "Grace" char name2[5]={'G','r','a','c','e'}; //name2는 문자열이 아니고 단순 문자 배열 null 값에 따라 문자열과 문자배열이 정해진다. 그렇다면 이제 주소를 입력받을 수 있는 코드를 작성해보자 #include using namespace std; int main() { // 주소를 입력받아 출력하기, char address[100]; // 크기가 100인 char address 배열 생성 cout > address; // 입력받은 주소를 address에 넣기 cout