본문 바로가기

함수

[C++] 함수 템플릿과 클래스 템플릿 (Function template & Class template) 함수 템플릿 템플릿의 종류에는 함수 템플릿, 클래스 템플릿 이 두가지로 나뉠 수 있다. 책마다 함수 템플릿 또는 템플릿 함수로 이 두가지로 표기가 되어 있는데, 이런 명사 두개가 오는 단어들은 뒤에가 진짜다. 우선 함수 템플릿, 템플릿 함수의 의미를 정리 해보자. - 함수 템플릿 : 함수를 기반으로 구현이 된 템플릿 (함수가 아니라는 뜻이다) - 템플릿 함수 : 템플릿을 기반으로 한 함수라는 뜻 우리가 앞서 본 템플릿 예제는 함수 템플릿이다. 이 함수 템플릿에 대해 좀 더 자세히 알아 보자. 둘이상의 타입에 대한 템플릿 #include using namespace std; template // 함수 템플릿 정의 void ShowData(T a, T b) { cout 더보기
[C++] 상속의 마지막, 다중 상속(Multiple Inheritance) 다중 상속이란? #include using namespace std; class AAA{ public: void String1(){ cout 더보기
가상 함수 동작 원리와 단점 동작 원리 : 가상함수는 어떻게 동작을 할까? 객체가 생성되면 멤버 함수는 메모리의 코드영역에 올라가게 된다. 우리가 생성한 객체는 코드 영역에 있는 이 멤버함수를 공유하게 것이죠. 하지만 클래스에 한개 이상의 가상 함수가 있을 경우에는 컴파일러는 실제 호출되어야 할 함수의 위치 정보를 가지고 있는 가상 함수 테이블(Vritual Table) 이라는 것을 만들고, 클래의 객체에는 가상 함수 테이블을 위한 포인터가 멤버 변수로 추가 시킵니다. 일반적으로 가상 함수가 있는 객체는 가상 함수 테이블에 있는 함수만을 호출하는 원칙을 가지고 있다. 가상 함수의 단점 : 가상 함수를 사용해서 생기는 단점은 두가지를 들 수 있다. 첫번째로, 가상함수를 쓰면 가상함수 테이블을 만드므로 그만큼의 메모리 공간의 소모가 일.. 더보기
[EC++] 항목 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 만약 우리가 클래스를 만들때, 클래스안에 아무것도 넣지 않았다면, 컴파일러가 복사 생성자(copy constructor), 복사 대입 연산자(copy assignment operator), 소멸자(destructor)를 저절로 선언해 주게 됩니다. 이때 컴파일러가 만드는 함수의 형태는 모두 기본형이고 public 멤버 이면서 inline 함수 입니다. class Empty(){}; 즉, 위와 같이 선언된 클래스는 아래와 같다는 이야기 입니다. class Empty{ public: Empty() {} //기본 생성자 Empty(const Empty& emt){} //복사 생성자 ~Empty(){} //소멸자 Empty& operator = (const Empty& emt){} //복사 대입 연산자 }; 기.. 더보기
[C++의 특징 - 2] 인라인 함수(Inline Function) 와 네임스페이스(Namespace) 이전에 C에서는 매크로 함수라는게 있었습니다. C++에서는 이것과 똑같은 기능을 하는것이 바로 인라인 함수 입니다. 우선 매크로 함수에 대해서 살짝 알아 보면... 1. 매크로 함수 (Macro Function) : 전처리기에 의해 처리 되면서, 매우 빠른 실행의 이점을 가지게 되는 함수이다. 아래와 같이 선언해 쓰고, 매크로 함수는 데이터형에 영향을 받지 않는 특징을 가지고 있다. #define Square ((x) * (x)) 하지만 왜 C++에 와서 그대로 매크로 함수를 쓰지 않고 인라인 함수라는 것을 새로 만들어서 사용하는 것일까? 그 이유를 한번 알아 보자. 2. 인라인 함수 (Inline Function) : C와의 매크로 함수와 같지만, 인라인 함수는 컴파일러단에서 처리되면서, 구현이 용이 .. 더보기
[C++의 특징 - 1] 함수 오버로딩과 디폴트 매개변수 (Funtion Overloading & Default Parameter) 1. 함수 오버로딩 : 함수 오버로딩(Function Overloading)이란 간단히 말하면, 동일한 이름의 함수를 중복해서 정의하는 것을 말합니다. (단, 매개변수의 정보가 달라야 한다는 가정하에 말입니다. 갯수나 타입이이 일치하지 않는 한도 내에서 말이죠) C언어에서는 함수이름의 중복을 허용하지 않았는데, 그 이유는 C언어에서 함수를 호출할 때, 함수의 이름정보만을 가지고 호출할 함수를 찾기 때문입니다. 하지만, C++ 에서는 호출할 함수를 찾는데 있어서, 이름뿐만 아니라 매개변수의 정보도 포함하고 있기 때문에 이런 기능이 가능한 것입니다. 아래와 같은 형태의 함수들은 C에서는 불가능했지만, C++에서는 이것이 가능하다는 얘기 입니다. int function (int n){} int function.. 더보기