항목 34 에서 가상 함수의 단점을 지적한 부분이 책에는 있는데, 나 같은 경우 생략했다. ^^; 단점은 가상함수는 기본 정의도 제공되기 때문에, 제공된 기본정의를 사용하다보면, 정작 다른 작동을 해야 할 때도 재정의를 해야 한다는것을 까먹고, 기본정의를 사용하여 디버깅이 아주 힘들수 있다는 점이다. 이것을 애초에 막고자 하려면 가상 함수를 대채할 무엇인가가 필요하다는 주제로 쓰여진 항목 35 이다. 자~ 이러한 단점들이 있음에도 가상 함수를 사용 한다는것을 찜찜해 하는 영리한 사람들은 생각하기 시작했다. "대체 할 수 있는게 없을까?" 필자는 두 팔을 다 걷어, 다른 방법을 몇가지 알려 준다고, 곽용재씨께서 말씀해 주셨다. ㅋ; 하나, 비가상 인터페이스 관용구(non-virtual interface :..
EC++ 검색 결과
인터페이스 상속과 구현 상속을 무엇을 의미 하는가? 기본 클래스의 멤버 함수의 상속 방법을 두고 하는 말이다. 인터페이스 상속과 구현 상속의 차이점은 무엇인가? 인터페이스 상속이란, 순수 가상 함수의 상속을 말한다. 구현 상속이란, 가상 함수와 비가상 함수의 상속을 말한다. 각 함수들은? 순수 가상 함수 : 가상함수 이나, 함수의 정의부분이 없고, 선언 부분만 있는 함수 가상 함수 : 파생 클래스에서 가상함수를 받는 함수가 없다면, 기본 클래스 함수가 호출되고 있다면, 파생 클래스의 가상 함수를 호출시켜주는 매체가 되는 함수 비 가상 함수 : 일반 멤버 함수, 각 함수들의 사용 법은? 순수 가상 함수 : 모든 파생 클래스마다 동일한 역활을 하는 고유의 동작을 필요로 하게 될 때 가상 함수 : 모든 파생 ..
현실세계에서나 C++ 세계에서나 이름은 중요하다. 그래서 이런 관용어구가 딱 들어 맞는데 "이름을 훔쳐가는 자는 빼앗긴 사람만 빈털터리로 만들고 마는 것입니다 : He that filches from me my good name ... makes me poor indeed : 곽용재씨께선 명예를 이름으로 본문성격에 맞추어 해석했다고 적혀 있음" 어떤가 딱 들어 맞는가? 왜 이런 의미로 쓰이는지 C++의 코드를 통하여, 알아 보자. 1. 예시 코드 int x;// 전역 변수 void someFunc() { double x;// 지역 변수 std::cin >> x;// 입력을 받아, 지역변수 x에 새 값을 읽어 넣는다. } 이 코드가 어떻게 움직일지는 다들 알겠지만 전역 변수 x에 값을 넣는것이 아닌, "최..
왜 그럴까? 쉽게 풀면, 모두다 이렇게 숙지하고 사용하기 때문이다. 이 모두 다 는 C++ 역시 마찬가지여서 이렇게 해야만 한다, (유들있게 한다면, 뭐 대충 해도 되겠지만) 이 의미는 어떤것을 지니게 될까? 학생 is a 사람, 하지만 사람 is a 학생 은 되지 않는것이다. C++로 풀자면 "상속받은 녀석은 상속해준 녀석이 될수 있지만, 상속해준 녀석은 상속받은 녀석이 될수 없다"는것이다. 그렇기 때문에, 이런 오류를 하지 말라고 필자는 강하게 말하고 있다. 왜냐하면 이런 오류가 C++의 엄청난 기능인 "다향성" 기능을 사용할 때 쉽게 범하는 오류이기 때문이다. 그렇다고 현실에 있는것이 바로 이런것들을 적용할수는 없다. 대표적인 예가 정사각형은 직사각형의 일종이지만, 정사각형이 직사각형을 상속하는 형..
이 말이 무엇을 의미 하는가? 쉽게 말한다면 #include 관계를 뜻하고, 이 #include 관계를 줄이자는 뜻이다. 왜 파일 간 의존성을 줄어야 할까? 컴파일에 소모되는 시간을 줄여주기 때문이다. #include 관계가 많을수록 코드 수정 후 재컴파일에 들어가는 시간이 비례한다. 이게 프로젝트 중이라면, 정말 많은 시간을 컴파일하는데만 써야 할 것 이다. 어떻게하면 파일간의 의존성을 줄일수 있는가? "구현 세부사항이 필요한 경우와 필요 없는것 경우를 나누면 된다" 이것이 원리이다. 구현 세부 사항이 필요한 경우가 어떤 경우인가? 풀면 이해가 쉽다. 구현 하는데 그 세부사항이 필요하다는것을 뜻하는데, 그 예로 A라는 클래스가 B라는 클래스의 객체를 가질 때, 객체 구현시 그 세부사항이 필요한 경우이다..
인라인 함수를 모른다면 이야기가 .. 진행되지 않으나, 기초기 때문에 넘긴다. 미주얼고주알 따져서 이해해두어야 하는 이유는 여러개가 있다. .. 뭐 .. 이해하고 나니 인라인도 인라인 나름이라는 생각을 하게 되어서 결론만 나오게 된다. 인라인 사용법 첫째, 간단한것만 inline 키워드를 사용 한다.(클래스 내부의 .. 그냥 멤버 리턴같은 것들) 이것밖에 없다. 둘째, 생성자와 소멸자를 inline 으로 사용 하려 들지 말자.(생성자와 소멸자 호출 구역이 상대적으로 많고, 생성자 수정을 하게 된다면, 생성자 호출 구역을 전부 재컴파일 해야 되기 때문이다) 이것만은 잊지 말자! 1. 함수 인라인은 작으면서 자주 호출되는 함수에 대해서만 하는 것으로 묶어 두자. 2. 함수 템플릿이 대개 헤더 파일에 들어 간..
최근댓글