전체 글(603)
-
컴파일러의 디폴트 제공 함수들(effective c++ 05)
디폴트 제공클래스를 선언할 때 빈 클래스를 선언한다 하더라도 컴파일러는 기본적으로 복사 생성자(copy constructor), 복사 대입 연산자(copy assignment operator) 그리고 소멸자(destructor)를 public, inline으로 제공한다.* 만약 사용자가 디폴트로 제공하는 것을 선언했을 경우에는 생성자를 디폴트로 제공하지 않는다. 디폴트 생성 거부디폴트로 제공되어진 것들은 정말 기본적으로 제공되어지는 것이기 때문에 동작이 적법해야만 한다. 예를 들어 레퍼런스 변수와 같은 본래 가지고 있던 것 외에 바뀌면 안 되는 것들은 컴파일러가 디폴트 생성을 거부합니다. 위와 같이 레퍼런스 멤버가 있는 클래스는 디폴트 대입 연산자가 제공되지 않고 컴파일러는 컴파일을 거부하게 된다.
2015.07.27 -
const 들이대기(effective c++ 03)
const는 팔방미인의미적인 제약을 소스 코드 수준에서 붙일 수 있다.const 키워드가 붙은 객체는 외부 변경을 불가능하게 하고,컴파일러가 이 제약을 단단히 지켜준다. 주의점상수객체와 비상수객체는 함수의 오버로딩 대상에 포함된다.상수 멤버 함수의 반환값이 참조자라면, 상수형 참조자를 반환 할 수 있게 만들어야 한다. (기본제공 타입을 반환하는 함수의 반환값 수정은 공통적으로 불가능 하다는 규칙을 따르기 위함) 12345char *p = greeting; //비상수 포인터, 비상수 데이터const char *p = greeting; //비상수 포인터, 상수 데이터char const *p = greeting; //비상수 포인터, 상수 데이터 char * const p = greeting; //상수 포인터 ..
2015.07.27 -
#define 안녕(effective c++ 02)
#define 문제점#define은 C++언어 자체의 일부가 아닌 것으로 취급될 수 있다.사람들에겐 기호식 이름(Symbolic name)으로 보이지만 컴파일러에겐 보이지 않기 때문에 숫자 상수로 대체된 코드에서 컴파일 에러가 발생 시 혹은 디버깅 시에 문제가 생길 수 있다. 매크로 대신 상수를 사용한다!언어 차원에서 지원하는 타입이기 때문에 컴파일러 눈에도 보이며 기호 테이블에도 들어간다.최종 코드의 크기가 #define을 썼을 때보다 작게 나올 수 있다. ( 매크로는 목적 코드 안에 사본이 등장 횟수만큼 들어가지만, 상수는 사본이 한 개만 생긴다. ) 주의사항상수 포인터( constant pointer )를 정의 하는 경우상수 정의 는 대개 헤더 파일에 넣는 것이 상례이므로 포인터는 꼭 const로 ..
2015.07.27 -
C++은 연합체로 바라보자(effective c++ 01)
C++초기C언어에 객체 지향 기능 몇 가지가 결합된 형태C with Classes 라는 명칭으로 시작 발전아이디어, 기능, 프로그래밍 전략들을 취해 자기 것으로 만듦예외 : 함수 구성 방식의 헤게모니(주도권)을 크게 바꿈템플릿 : 프로그램 설계에 대한 새로운 사고방식을 선사STL : ‘확장성’에 대한 지평을 열었다. 특징다중 패러다임 프로그래밍 언어(Multi Paradigm Programming Language)라 불린다.절차적 프로그래밍(Procedural Programming)을 기본으로 하되,객체 지향(Object-Oriented), 함수식(functional), 일반화(Generic) 프로그래밍을 포함하며,메타 프로그래밍(Metaprogramming) 개념까지 지원한다. C++의 하위언어C- 블..
2015.07.27 -
객체 복사(effective c++ 12)
좋은 객체 설계안쪽 부분을 캡슐화한 객체 지향 시스템에서잘 된 설계는 객체를 복사하는 함수가 딱 둘만 있는 것이다!이를 통틀어 복사 함수(copting function)이라 한다. 컴파일러는 디폴트 복사 생성자를 제공한다.데이터를 빠짐없이 복사하는데 충실하다. 사용자가 직접 만들면 어떤 문제가?!모든 멤버를 완전히 복사하지 않을 때(부분 복사 - partial copy) 경고가 없다. 상속 문제문제점기본 클래스의 맴버 변수들이 초기화 되지 않는다. 해결복사생성자 - 기본 클래스의 복사 생성자를 호출한다.대입 연산자 - 기본 클래스 부분을 대입한다. 복사 생성자와 복사 대입 연산자의 상호 이용?절대 하지 말자!
2015.07.26 -
[면접] 최근 면접을 다니며..
요즘 면접을 다니며 드는 생각은 아직 갈 길이 멀고공부가 부족하다는 것을 많이 느낀다. 때는 바야흐로 6개월 전으로 돌아가면,http://hmjo.tistory.com/entry/C게임회사-1차-면접-탈락 한 게임 회사에 가서 면접을 탈락하고 적었던 글이 있다.사실 이때는 조금 시건방진 생각을 가지고 있었던 것 같다.4년제 국립대라는 타이틀만 믿고 열정과 패기, 관심을 보여주면간단히 입사할 수 있을 것이라는 낙관적인 생각을 하고 있었던것 같다.긍정이 과하면 낙관이 되고 낙관이 되면 그것은 재앙이다. KTM 아카데미를 들어오며 스승님에게 혼이 나며 마음을 많이 다잡았다.그렇게 교육과정이 끝나가고 마침내 여러 회사들에서 면접을 보고 있는데..6개월 전에 면접에 임하던 때와는 사뭇 느낌이 다르다.물론 실력도 ..
2015.07.25