메모리 공간은 크게 Code, Data, Stack, Heap으로 나누어짐

1. Code

- 함수 코드, 제어문 등이 저장되는 영역

2. Data

- 전역변수, Static변수가 저장되는 영역

3. Stack

- 지역변수 및 매개변수가 저장되는 영역

4. Heap

- 프로그램 실행과정에서 동적할당이 이뤄지는 영역

'Programming Language > 기본개념' 카테고리의 다른 글

Call-by-value , Call-by-reference  (0) 2019.07.19

객체지향 프로그래밍

-현실에 존재하는 사물과 대상, 그리고 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍

 

객체

-하나 이상의 상태 정보(데이터) + 하나 이상의 행동(기능)

 

하나의 객체가 다른 하나의 객체에게 메시지를 전달하는 방법은 함수호출을 기반으로함

'Programming Language > C++' 카테고리의 다른 글

02-3 참조자(Reference)  (0) 2019.07.20
02-2 bool 자료형  (0) 2019.07.20
03-2 클래스  (0) 2019.07.19
03-1 C++의 구조체  (0) 2019.07.19
04-4 this포인터  (0) 2019.07.18

구조체와 클래스 차이점

1.구조체는 선언된 함수가 아닌 다른 영역에서 변수를 초기화할 수 있음

-ex) Car myCar={"Hyundai",100};

-그러나, 클래스는 클래스 내에 변수는 클래스 내에 선언된 함수에서만 접근 가능

-ex) Car myCar;

 

2.구조체는 기본적으로 내부 변수와 함수에 대해 public으로됨 , 그러나 클래스는 default로 클래스 내에 선언된 변수 및 함수에 대한 접근을 private으로 함

 

 

접근제어 지시자

1.public : 어디서든 접근허용

2.protected : 상속관계에 있을 때, derived class에서 접근허용

3.private : 클래스 내에서만 접근 허용

 

 

접근제어 지시자 코드

 

 

==================================================================

객체

-클래스가 instance화 된 것

-현실 세계에서의 각각의 개체

 

멤버변수

-클래스를 구성하는 변수

 

멤버함수

-클래스를 구성하는 함수

 

===================================================================

C++에서의 파일분할

 

헤더파일

-Car.h : 클래스의 선언을 담음

-컴파일러가 클래스와 관련한 문장의 오류를 잡아내는 필요한 최소한의 정보를 담음

 

cpp파일

-Car.cpp : 클래스의 정의(멤버함수의 정의)를 담음

-다른 문장의 컴파일에 필요한 정보를 가지고 있지 않아서 함수의 정의는 컴파일된 후에, 링커에 의해 하나의 실행파일로만 묶이기만 하면됨

 

main파일

 

 

 

 

 

 

 

'Programming Language > C++' 카테고리의 다른 글

02-2 bool 자료형  (0) 2019.07.20
03-3 객체지향 프로그래밍  (0) 2019.07.19
03-1 C++의 구조체  (0) 2019.07.19
04-4 this포인터  (0) 2019.07.18
04-3 생성자와 소멸자  (0) 2019.07.18

구조체 

-연관 있는 데이터를 묶을 수 있는 문법적 장치

 

C의 구조체와 다른점

1.구조체 변수를 선언할 때 struct 키워드를 생략하고 사용할 수 있음
  - C :        struct Car myCar;

  - C++ :    Car myCar

2.구조체 안에 함수 삽입 가능

 

*실제로는 모든 Car구조체 변수가 하나의 함수를 공유(하지만, 논리적으로 각각의 변수가 자신의 함수를 갖는다고 생각해도됨)

 

구조체 코드 예시

 

 

'Programming Language > C++' 카테고리의 다른 글

03-3 객체지향 프로그래밍  (0) 2019.07.19
03-2 클래스  (0) 2019.07.19
04-4 this포인터  (0) 2019.07.18
04-3 생성자와 소멸자  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17

this 포인터

-객체 자신을 가리키는 용도로 사용되는 포인터

 

this 포인터 예시

 

참조값(참조의 정보)

-변수를 참조할 수 있는 값

 

int num=7;

int& ref=num; // 변수 num을 참조할 수 있는 참조의 정보가 전달됨

'Programming Language > C++' 카테고리의 다른 글

03-2 클래스  (0) 2019.07.19
03-1 C++의 구조체  (0) 2019.07.19
04-3 생성자와 소멸자  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17
04-1 정보은닉, 캡슐화  (0) 2019.07.17

생성자

-객체가 생성될 때 생성과 동시에 초기화하기 위해 호출됨

-객체 생성 할 때만 한번만 호출됨

 

생성자 형태

-클래스의 이름과 함수의 이름이 동일

-반환형 x, 실제로 반환 x

 

생성자 특징

-오버로딩 가능(생성자도 함수의 일종이라)

-매개변수에 디폴트 값 설정 가능

 

객체의 생성과정

1.메모리공간의할당

2.initializer를 이용한 멤버변수의 초기화

3.생성자의 몸체부분 실행

 

생성자 예시 코드

 

멤버 이니셜라이저(Member Initializer)

-멤버변수를 선언과 동시에 초기화(그런 형태로 바이너리 코드가 구성됨)

-initializer는 멤버변수로 선언된 객체의 생성자 호출에 활용됨

 

멤버 이니셜라이저 장점

-초기화의 대상 명확히 인식

-성능에 이점

 

멤버 이니셜라이저 예시 코드

멤버 이니셜라이저를 이용한 const상수 초기화

-const멤버변수(선언과 동시에 초기화해야함)도 이니셜라이저를 이용해만 초기화 가능(이니셜라이저를 이용하면 선언과 동시에 초기화가 이뤄지는 형태이기 때문에 )

멤버 이니셜라이저를 이용한 참조자 선언

-참조자도 선언과 동시에 초기화가 이루어져야 되기 때문에 이니셜라이저를 통해서만 초기화 가능

 

 

private 생성자

-클래스 내부에서만 객체의 생성을 허용하는 목적으로 사용함

<주의할점>

Rectangle rec() - 이렇게  하면 함수 원형 선언과 표현이 겹치기 때문에 사용 불가 (x)

Rectangle rec; - 이렇게 생성해야함

Rectangle rec(100); - 매개변수가 있는 경우

 

Rectangle* rec1=new Rectangle; - 표현 가능

Rectangle* rec2=new Rectangle(); - 동적할당할 때는 이렇게 표현가능
Rectangle* rec3=new Rectangle(100);

 

 

============================================================================

소멸자

-객체소멸시 반드시 호출됨

-소멸자는 생성자에서 할당한 리소스의 소멸에 사용

 

소멸자 형태

-클래스의 이름 앞에 '~'가 붙음

-반환형 x, 실제로 반환 x

-매개변수는 void형으로 선언되기 때문에 오버로딩,디폴트 값 설정 불가

-소멸자 명시해주지 않으면 디폴트 소멸자가 자동으로 삽입됨

 

소멸자 예시

 

 

 

 

'Programming Language > C++' 카테고리의 다른 글

03-1 C++의 구조체  (0) 2019.07.19
04-4 this포인터  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17
04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17

const 변수

-선언과 동시에 초기화 해줘야함

 

 

const 함수

-함수 내에서 동일 클래스 내에 선언된 멤버변수에 저장된 값을 변경하지 않겠다는 의미

-const함수 내에서는 const가 아닌 함수의 호출이 제한됨(아닌 함수가 값을 변경할 수 있는 가능성이 있기때문)

'Programming Language > C++' 카테고리의 다른 글

04-4 this포인터  (0) 2019.07.18
04-3 생성자와 소멸자  (0) 2019.07.18
04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17

정보은닉

-멤버변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서, 안전한 형태로 멤버변수의 접근을 유도하는 것

 

캡슐화

-관련 있는 모든 것을 하나의 클래스 안에 묶어 두는 것

*캡슐화는 목적이나 상황에 따라 범위가 달라짐

'Programming Language > C++' 카테고리의 다른 글

04-3 생성자와 소멸자  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16

디폴트 복사 생성자의 문제점

-얕은 복사(멤버 대 멤버를 단순히 복사함)

-얕은 복사를 하게 되면 여러개의 객체가 동일한 주소를 가진 문자열을 가리키는 상황이 발생!

 

깊은 복사

-멤버 뿐 아니라, 포인터로 참조하는 대상까지 깊게 복사

 

 

 

'Programming Language > C++' 카테고리의 다른 글

04-2 const 키워드  (0) 2019.07.17
04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16
07-2 상속의 문법  (0) 2019.07.16

<복사생성자 사용하는 이유>

-변수 끼리 대입 연산 시 경우의 수가 너무 많음(기본자료형끼리는 간단해도 객체끼리는 복잡함)

-C++이 우리가 대입 시 일어날 수 있을 정의할 수 있게 해줌

-이를 정의하기 위해 "복사생성자"가 필요

 

<복사생성자 호출되는 시점(공통점- 객체를 새로 생성할 때 생성과 동시에 동일한 자료형의 객체로 초기화해야하는 경우)>

1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우

2. Call-by-value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우

3. 객체를 반환하되, 참조형으로 반환하지 않는 경우

 

*이미 생성된 변수끼리의 대입연산은 연산자 오버로딩= 함수를 호출

-ex)app1=app2

 

<묵시적 변환>

복사생성자를 이해하기 위해서는 다음 문장의 의미를 알 필요가 있음

SoSimple sim2=sim1;

SoSimple sim2(sim1);

첫번째 문장이 두번째 문장의 형태로 묵시적 변환이 됨

 

<explicit>

-복사 생성자의 묵시적 변환을 막는 키워드

SoSimple sim2(sim1)

-이런 형식으로 대입연산을 해주어야함

 

 

<임시객체>

-임시객체가 생성된 위치에서는 임시객체의 참조값이 반환됨

-임시객체는 다음행으로 넘어가면 바로 소멸됨

*참조자에 참조되는 임시객체는 바로 소멸되지 않음

 

<유의점>

-임시 객체가 새로운 객체에 대입되는 경우 복사생성자 호출안됨

-첫번째 소멸자는 GetMonster의 매개변수 mon의 소멸자 호출이고

-프로그램이 끝날때까지 GetMonster의 반환으로 생성된 Monster객체는 mon2라는 이름으로 할당되어 살아있음

 

 

 

 

'Programming Language > C++' 카테고리의 다른 글

04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16
07-2 상속의 문법  (0) 2019.07.16
07-1 상속의 필요성  (0) 2019.07.16

+ Recent posts