본문 바로가기

카테고리 없음

Chapter 01. C와는 다른 C++ (내용정리)

절차지향 & 객체지향 


절차지향 - C언어 

{

a;

b;        a -> b -> c '순서대로' 수행 

c;        -> 대규모 project에 부족함이 있다.

}


대규모 프로젝트 =>   각자의 관계가 중요해진다. 

객체 간의 관계를 연결/상호작용의 능력이 중요하다. 


객체지향 - C++

Class <- 함수 + 구조체 (모양)


추상    개념    : 설계     <- 추상 class

Class                                        분리

실체    구현                <- Implementation



개념과 구현을 분리하자!



Hello World로 본 C++


std::cout << "Hello, World" << std::endl;


std : namespace '소속'으로 생각

:: : '범위 지정 연산자' ~안에 들어있다. 

cout : 출력을 담당하는 객체

endl : end of line 한줄을 띄운다. 

<< : Redirection 

terminal 에서 어떤 내용을 어떤 곳에 넘길 때 사용되는 명령어 

모든 장치는 file로 추상화 되므로, I/O관련 장치가 추상화된 file에 내용을 '넘긴다(쓴다)'의 개념으로 이해 


즉, std에 속한 cout 객체에게 "Hello, World"와 std에 속한 end of line이라는 것을 출력해 달라고 넘겨준다. 


C vs C++

C - 물건(함수)를 사용자(개발자)가 잘 써라 

C++ - 사용하기 쉬운 물건(객체)를 '잘'만들어서 사용자(개발자)에게 제공하고, 사용해라. 


어떤 일을 할 때 그 일을 잘 수행하는 객체에게 일을 맡긴하는 개념을 가지자. 

행위의 주체와 이용하는 주체를 분리하자. 

=> 구조가 간결해지고 큰 틀을 만들고 세세한 부분을 차후 개발하기 용이하다. 



Instance


일종의 '예시'라고 볼 수 있다. 


ex) 

철수는 사람이다. 라고 할 때 철수는 사람이란 형식의 하나의 '예시'가 된다. 

int a;    a는 int라는 자료형에 대한 하나의 '예시' 즉, 인스턴스이다. 


변수라는 단어 대신 Instance 라는 단어를 사용하자. 



자료형


int a(10);

int b(a);    와 같은 방식으로 선언 및 정의가 가능하다. (물론 C Style도 가능하다.)

int (10);    이름없는 인스턴스 선언 및 정의 (이런것도 가능하다.) 


auto

초기값 형식에 맞춰 선언하는 인스턴스의 형식이 '자동'으로 결정 

함수포인터를 대상으로도 가능하다. (개꿀) 


int a(10);

int b(a);

auto c(b);    <- 자동으로 int형으로 선언 


Memory 동적할당


malloc() - 성공, 실패를 반환값을 통해 판별이 가능하다. 

  허나 현재 왜앤만하면 실패하지 않는다 (고로 예외처리로 넘어갔다.) 

  => 연산자로 재 탄생 


malloc(), free()  ->  new, delete 



형식 *변수이름 = new 형식

delete 변수이름 

 

형식 *변수이름 = new 형식[요소개수]

delete[] 변수이름 


굳이 memory 크기를 정하지 않아도된다. 

배열형태로 동적할당한 것은 배열 형태로 삭제 해야한다. 


new 연산자 객체 생성자 호출, delete 소멸자 호출 



참조자 형식


참조자는 '별명'이다. 


형식 &이름 = 원본; or 형식 &이름(원본);


Pointer가 가리키는 대상이 수시로 변할 수 있는 '변수'라는 점 때문에 생겨난 문법 


선언과 동시에 초기화 해야한다. 

처음 초기화한 대상을 변경할 수 없다. 

구현상 '형식 * const 이름 = 원본'과 같이 선언한 포인터와 동일하다. 

참조자 안에는 가리키고있는 변수의 주소가 들어있다. 


간접 지정 연산을 사용하지 않는다. 


call by reference 에서 함수를 call할 때 instance의 주소가 아니라 원형을 전달해야 한다. 

그렇기 때문에 호출자 code만 봐서는 매개변수가 참조형식인지 아닌지 알 수 없다. 



r-value 참조


int &&rdata = 3; 과 같은 꼴로 선언 및 정의 


r-value만 참조가 가능하다.  


이름이 없는 임시객체를 저장하기위해 나옴 (자세한 설명은 아직 할 수 없다함...) 



범위 기반 for문


for (auto 요소변수 : 배열이름)

반복구문;


배열의 갯수에 맞춰 자동으로 반복 횟수를 결정한다. 

배열의 내용을 변경하려면 요소 변수 자리에 참조형 변수를 사용하면 된다. 


for (auto n : 배열이름) 

반복구문;                <= Read Only


for (auto &n : 배열이름)                                   의도치 않은 Write 실수를 막을 수 있다.

반복구문;                <= Read / Write




- 출처 : 이것이 C++이다. (최호성, 한빛미디어)