내일 / 내일모레 수업 없음
레퍼런스
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 레퍼런스도 있는데 지금은 안배울 것)
#include <string> - stl에서 제공하는 문자열 기반 클래스 템플릿
헤더파일을 포함해야 사용 가능함.(아래와 헷갈리지 않도록)
#include <string.h> - c언어 시절에 있던 헤더.
#include <cstring> - mfc에서 제공하는 문자열 클래스 헤더파일
캐릭터(char)와의 차이점.
char szName[32] = "hello";
char szTemp[32] ={};
szTemp = szName; //X
되지 않음. 주소에 주소를 대입하는 형태(배열의 첫 대표주소니까)
- 크기 결정이 필요하지 않음.
- 대입 연산이 가능함.
- 연산자 사용이 가능함.(
==, +, +=) operator 오버로딩. - 멤버함수를 호출할 수 있음.
- char형과 string은 혼합 사용이 가능함.(그러나 char에 string은 안됨.)
- 다만 위 5번이 가능하기 위한 c_str() 등이 있음
C++개론
2개월 차는 class문법과 STL문법으로 나뉜다. C++ = OOP(클래스) + G.P(Generic Program : STL) Objected Oriented Programing;
절차 지향 : C언어 → ~하다, 동사 중심의 언어(함수). 객체 지향 : C++ → 주어 중심의 언어(클래스).
용량 : 절차 < 객체 비용 : 절차 < 객체 유지보수 : 절차 > 객체
객체 지향 프로그래밍의 특징 객체 : 현실에 존재하는 대상을 프로그래밍 언어로 표현해놓은 상태. 객체 = 인스턴스(실제 메모리에 할당된 상태) + 클래스(사용자 정의 자료형) 객체 생성 : 클래스 타입의 대상을 메모리에 할당하는 행위 추상화 : (OOP의 특성 중 제일 우선되는 특징) 실제 사물이 가진 것 중 공통적인 요소만 뽑아내는 것. =데이터와 기능으로 추출해내가는 것. 클래스 : 데이터(변수,상수)와 기능(함수)의 집합체 C++의 구조체는 데이터와 기능이 집합되기 때문에, 클래스와 같이 객체로 가능
클래스의 속성?
권장사항
- 텍스트 RPG
- 자료구조 책을 한권 읽어보고 와라.(큐 스택 리스트 정독)
- 책에 있는 코드를 사용해서 내가 편한 단어와 자료형의 이름으로 바꾸어보아라.