C ++ 이론(8)

Hi Beck·2023년 7월 20일

TIL-Language(C & C++)

목록 보기
34/34

RTTI

== 런타임의 자료형이 정해지는 타입.다형성과 STL이 여기에 속한다.
== 자료형이 일정하게 정해져있지않고 런타임의 어떤 객체냐에 따라서 그 타입으로 변환시켜주는 존재
== 실행 전에는 어떤 함수가 호출될지 모르는데 실행됐을때의 객체에 따라서 자료형이 자유자재로 변하는게 RTTI란 개념이다.
==virtual 클래스로부터 상속이 하나라도 존재하면 RTTI를 사용하고있다고 보면 된다.

  • 가상함수 테이블이 RTTI를 도와준다.

dynamic_cast가 가상함수테이블이 필요없는 경우에는 static_cast를 사용하게끔 되어있고 실행이 되고나서 자료형이 정해지는 경우는 가상함수테이블이 필요해서 dynamic_cast로 RTTI를 적용하여 작동하는 구조로 설계되어있다.

  • reinterpret_cast는 위험하고 쓰지도않아서 스킵

Template

== 자료형에 구애받지않는
== 자료형에 관계없이 실행 가능하게해주는 존재

  1. 오버로드

기존에 우리는 함수를 짤때 자료형 하나로만 입력값을 받고 반환했었는데 다른 자료형에 대한 함수를 만들어달라하면 함수정의문과 호출문을 그때마다 추가해야된다.

ex)
int addNum(int a, int b)
{
return a+b;
}
float addNum(float a, float b) //오버로드 된 함수
{
return a+b;
}

그렇게 오버로드 된 함수는( 오버로드 == 함수정의문의 이름과 내용은 같은데 매개변수의형태 즉 자료형이 다른것 ) 아래처럼 얼마든지 더 만들어도 문제가 되지않는다.(이걸 오버로드 된 상태라고 한다.)

float addNum(float a)
{
return a;
}

char addNum(char a)
{
return a;
}

이렇게 4개의 함수 정의문이 있는데 메인함수에선 호출문에 들어가는 인자의 형태에 따라 함수이름이 동일한데도 불구하고 인자 형태(자료형,인자 갯수)에 맞는 함수가 호출이된다.

  • flaot은 인자 끝에 f 써주는것 잊지말기
  • 함수를 치고 괄호를 열면 조금한 창이 뜨는데 동일 함수 갯수와 형태가 뜸

2.오버로드의 조건 두 가지
ㄱ. 함수 이름이 동일해야된다.
ㄴ. 함수의 매개변수 갯수나 자료형이 달라야한다.(갯수만 다른것도 가능)

3.오버로드의 한계
추가되는 요구에 대응하기위해서 나온 개념이 오버로드인데 이 오버로드도 동일함수명이 무수히 많아지기때문에 한계가 있다.그래서 문법적으로 다 통일해서 하나로 만든 탬플릿이 나오게 된다.

  • 오버라이드 함수는 부모의 메서드만 재정의한것을 말함(필드는 재정의할 수 없음 주의!).오버라이딩 된 함수는 부모의 함수 이름, 반환값, 매개변수 등이 완벽하게 부모와 동일하다는게 특징이다.(부모의것을 그대로 가져와서 메서드만 바꿔준거니깐)

4-0.Template

4-1.탬플릿의 구조

Template< class T >
T addNum(T a, T b)
{
return a+b;
}

구조는 우리가 만들었던 클래스,구조체와 비슷하다.왜냐하면 이것 또한 사용자에 의해 창조되는 자료형이기때문이다.그리고 매개변수 자료형 자리엔 T가 위치함

4-2. 특징
T가 인자가 들어오면 인자의 자료형에 따라 동일하게 변경돼서 맞춰준다.
그게 언제냐면 런타임때(=함수 호출로 실행시)
뭐가 들어오던지 다 커버가 가능.
앞에 오버로드와 기능은 동일하지만 훨씬 더 효율성 있게함.
클래스를 넣는것도 가능하지만 그건 계산 용도로는 불가

STL

탬플릿을 표준적으로 어떻게 쓰는가를 뜻함

기존에는 함수에다가 적용했다고하면 이번엔 변수에다가 탬플릿을 적용한다.
변수는 자료형이 정해진건데 STL은 이 변수의 자료형을 좀 더 유연하게 쓸 수 있게끔해준다.

배열도 우리가 여러 자료형으로 다 만들었던것 생각하면 배열도 탬플릿이다.
이런 배열 같은 애들의 종류가 몇 개 존재한다.
그리고 이런걸 자료구조라고 한다.

자료 == 데이터 == 변수들, 상수들, 어떤값들처럼 컴퓨터에 저장이 되는 존재
-> 이런 자료들을 어떤 방식으로 구조를 짜서 저장할거냐라는게 '자료구조'라는 학문이다.

배열은 자료구조 중 하나로 데이터 하나하나가 일렬로 붙여서 유지한다는 특징이 있는데 이걸로 사용자는 인덱스가 있어서 배열이름(주소값)에 자료형만큼의 크기 곱하기 원소 갯수를 해서 배열의 원소에 접근할 수 있다.

하지만 배열의 단점이 있는데 선언하면서 정한 크기는 바꿀 수 없다.또한 그 크기를 넘어가면 오류가 난다.이런 단점들이 있어 나온게 다른 자료들이다.

profile
Emotional realizer

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 잘 읽었습니다, 고맙습니다!

답글 달기