수업기록

내일 / 내일모레 수업 없음

레퍼런스 C++에서부터 등장하는 자료형.

포인터를 통해서 메모리 공간을 참조했을 때,

int * p  = #
*p = 20;

포인터가 주소값을 통해서 참조하는 행위를 “간접 참조”한다고 칭함. p와 num은 동일한 것이 아님. 엄연히 다른 자료형과 다른 값을 지니지만 단지, 같은 메모리 공간에 접근할 수 있을 뿐임.

*(&num)= 20;

직접 참조 : 어떠한 도구나 변수 없이 직접적으로 해당 변수의 주소를 추출하여 메모리 공간의 접근함.

레퍼런스

int& r = num; //자료형에 &
r =20;

직접 참조의 방식. 이것이 왜 직접 참조인가? 위 p와 num의 주소는 다르지만, r과 num의 주소는 같음. 또한, 레퍼런스는 용량이 없음. sizeof(r)을 하면 4바이트가 나오지만, 그저 ‘참조 가능한 데이터의 크기’를 의미할 뿐임.

! 레퍼런스는 기능만 가지고 있는 자료형이라고 보는 것이 맞음. 그렇기에 용량이 없기에 선언과 동시에 초기화를 꼭 실행해주어야 함.

! 레퍼런스는 참조의 대상이 오로지 하나만 가능함.(초기화 이후로 변경될 수 없다는 뜻)


레퍼런스의 장점 용량이 없고 속도가 빠르며 개별적 참조 대상을 두어 데이터 관리가 효율적. call_by_value쓰듯이 사용할 수 있음.

레퍼런스의 한계 lvalue만 참조가 가능함, 동적할당을 할 수가 없다. 참조 대상이 변경 불가하다.

Lvalue만 참조 가능하다?

const int& r = 100; //예외적으로 가능함

읽기 전용 레퍼런스 : 문자열 상수에 많이 사용함. 매개변수로 사용할 때. (rvalue 레퍼런스도 있는데 지금은 안배울 것)


string

#include <string> - stl에서 제공하는 문자열 기반 클래스 템플릿 헤더파일을 포함해야 사용 가능함.(아래와 헷갈리지 않도록)

#include <string.h> - c언어 시절에 있던 헤더. #include <cstring> - mfc에서 제공하는 문자열 클래스 헤더파일

캐릭터(char)와의 차이점.

char szName[32] = "hello";
char szTemp[32] ={};
szTemp = szName; //X

되지 않음. 주소에 주소를 대입하는 형태(배열의 첫 대표주소니까)

  1. 크기 결정이 필요하지 않음.
  2. 대입 연산이 가능함.
  3. 연산자 사용이 가능함.(==, +, +=) operator 오버로딩.
  4. 멤버함수를 호출할 수 있음.
  5. char형과 string은 혼합 사용이 가능함.(그러나 char에 string은 안됨.)
  6. 다만 위 5번이 가능하기 위한 c_str() 등이 있음

C++개론

2개월 차는 class문법과 STL문법으로 나뉜다. C++ = OOP(클래스) + G.P(Generic Program : STL) Objected Oriented Programing;

절차 지향 : C언어 ~하다, 동사 중심의 언어(함수). 객체 지향 : C++ 주어 중심의 언어(클래스).

용량 : 절차 < 객체 비용 : 절차 < 객체 유지보수 : 절차 > 객체


객체지향

객체 지향 프로그래밍의 특징 객체 : 현실에 존재하는 대상을 프로그래밍 언어로 표현해놓은 상태. 객체 = 인스턴스(실제 메모리에 할당된 상태) + 클래스(사용자 정의 자료형) 객체 생성 : 클래스 타입의 대상을 메모리에 할당하는 행위 추상화 : (OOP의 특성 중 제일 우선되는 특징) 실제 사물이 가진 것 중 공통적인 요소만 뽑아내는 것. =데이터와 기능으로 추출해내가는 것. 클래스 : 데이터(변수,상수)와 기능(함수)의 집합체 C++의 구조체는 데이터와 기능이 집합되기 때문에, 클래스와 같이 객체로 가능

클래스의 속성?

권장사항

  1. 텍스트 RPG
  2. 자료구조 책을 한권 읽어보고 와라.(큐 스택 리스트 정독)
  3. 책에 있는 코드를 사용해서 내가 편한 단어와 자료형의 이름으로 바꾸어보아라.