{ 무엇을 간접 변환이라고 하는가? 하나의 타입이 개발자가 눈치 못채게 다른 타입으로 변환 되는 것을 뜻하거나, 타입 변환이 정의하지 않아도 되는 것, 또는 변환 연산자 정의로 인하여, 변환되는 것을 뜻한다.(operator char*() 같은 것) 이것을 왜 피해야 하는가? 이것은 생성자의 호출이 예측하기 어렵게 만들고, 함수의 호출 역시 예측하기 어렵게 만들기 때문이다. 음~ 예를 들어 달라. #include class Widget { public: Widget( unsigned int ) { std::cout
책 정리/C++ Coding Standards : C++ 코딩의 정석 검색 결과
{ 여기서 잠깐, 비공용이란 private 을, 공용이란, public 을 의미 하며, 가상이란 virtual 함수, 비가상이란 non virtual 를 뜻한다. 난 사실 이 제목데로 하는것에 마음에 와 닿지 않는다. 실제로 이렇게 구현 하려고 노력했지만, 경험상 다른 사람들이 봤을 때 익숙치 않아, 가독성이 떨어진다는 의견이 많기 때문이다. 물론 여기에 나 또한 포함 된다. : ) 이 가독성은 익숙치 않기 때문일지도 모른다. 이런 생각 때문에 나는 이것을 놓치기 싫어서, 다른 사람들의 자료를 찾기 시작했고, 정리를 하였다. 기본 예제 // 일반적인 방법의 다형성을 사용하기 위한 예제 #include // 기반 클래스 class Bird { public: virtual void Fly( char *__p..
{ 오버라이딩이란 무엇인가? 상속 관계에서의 멤버 함수를 재정의 하는 것을 의미한다. 오버로딩이란 무엇인가? 오버로딩은 함수를 확장한다는 의미이다. .. 사실 다른 함수를 같은 이름으로 만드는것이지만, : ) 안전하지 않은 오버라이딩의 예는 무엇인가? 1. 재정의 함수와 본래함수가 다른 디폴트 매개변수를 사용 할때, 정말 힘든 디버깅을 할 수 있다. 예) #include class Base { public: virtual void Draw( char * p = "두꺼바 두꺼바 헌집 줄께 새집 다오" ) { std::cout
{ 이 글의 취지는 무엇인가? 상속을 잘못되게 사용하지 말라는 것이다. 상속의 정확한 의미가 무엇일까? 상속은 말 그대로, 이어 받는 것을 말하는데, C++에선 상속해 주는 녀석의 행동을 이어 받는 것이다. 그래서 "is-a" 관계라 든지 "works-like-a" 라든지 상속은 이런 관계일 때만 해야 한다고 한다. is-a 관계 : B is a A 라는 관계인데, B가 A로 봐도 무리가 없다면, 상속을 해도 된다.(물론 상속을 하지 않아도 된다면 하지 않는게 좋다) works-like-a 관계 : B works like a A 라는 관계인데, B가 A 처럼 행동해야 할때, 상속을 해도 된다. 물론~ 하지 않아도 되면, 하지 않는게 좋다. 상속으로 코드의 재사용을 하면 안되는 이유가 무엇인가? 상속은 대..
{ 지금까지 상속이 필요하지 않다면, 사용하지 않는게 좋다는 이야기였다면, 이번 항목에서는 상속이 없다면 어려운 것들을 상속을 통해 보다 간단하게 만드는 방법이 있고, 어떻게 만드는 것이 좋은지에 대한 설명이 들어 있었다. 일단 이 책의 내용 중에서, 가장 어렵게 설명한 내용이지 않을까 한다. 어떤 것을 상속을 통해 손쉽게 해결 할 수 있는가? 비유 해서 설명하자면, 개과 동물 들 중에서 Dog 와, Wolf, Dingo, 등이 있다고 하자. 그리고 이 개과 동물들은 "짖는다"라는 행동은 갖으나, 소리가 다르다는 것을 알 수 있을 것이다. 만약, 내가 개과 동물들의 "짖는다"라는 행동을 보고 싶다면, 각 동물마다 "짖는다" 라는 함수를 호출해야 할 것이다. 이 작업이 여간 힘든게 아니다. 각 동물들은 수..
{ 쉽게 말하면, "기반 클래스"로 디자인 되지 않았으니까, 상속하지 않는건 당연하다. 그런데 왜 이런 말이 나오냐 하면, "잘못된 상속"을 사용할 수 있기 때문이다. 기반 클래스로 쓰이는 클래스의 경우, 대부분 다형성을 이용한 객체의 제어 때문에 사용 된다. 이는 상속하는 클래스 B가 기반클래스 A 처럼 행동 해야 할 때인데, 기반 클래스로 디자인하지 않을 경우, 가상 함수가 없다는 것을 의미한다. 이는 가상 소멸자(다형성을 사용하지 않는다면, 그냥 소멸자라도 상관 없다.)가 없어서, 스택이나 힙이 오염될 수 있고, 기반 클래스 A의 의도와 다르게, 상속 클래스 B를 사용 할 수 있다. 왜냐하면, 기반 클래스 A의 성질을 보다 정확하고 잘 아는 사람은 원래의 제작자이다. 그런 제작자가 기반 클래스로 쓰..
최근댓글