본문 바로가기

c++ 언어

(20)
항목 6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 어려운 내용은 아니다생성자를 private 선언으로만 두면 막을수 있고책에서는 부모클래스의 생성자를 private 으로 두고 실제 자식클래스에 상속을 하는 방법도 있다고 한다.너무 대충하는 건가 ㅋㅋ
항목 5 : c++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 새우자 class TEST{};TEST test;위의 클래스를 보면 비어 있지만 실제 3가지 기능이 들어간다.1. 생성자 2, 소멸자 3. 대입연산자생성자, 소멸자는 하는 일이 없이 그냥 비어있는 함수다TEST() , ~TEST() 대입연산자는 클래스를 복사를 한다.예를 들어class TEST{int a;int *p;string str;};TEST A;TEST B;A = B;A클래스에 B클래스의 맴버변수가 자동으로 대입이 된다.문제는 *p 같이 포인터의 주소값을 넘기게 될 경우 메모리 릭 이나 소멸자에서 delete시에 두번 호출되어 죽을 수도 있다. 내 생각은 생성자 , 소멸자 , 대입연산자는 사용자가 클래스를 만들면 만드시 만들어 놓자는 거다하는일이 없더라도 일단 생성자, 소멸자의 경우 초기화 용도로 추가를..
항목 4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자 객체 초기화.... 초기화 , 대입의 차이점을 명확히 알면 어려운 내용이 아니다. 초기화 int a = 10 , string test = "hello world"; struct a = {10, 20, 30}; 대입 int a; a = 10; string test; test = "hello world"; struct a; a = {10, 20, 30}; c언어에서는 초기화 나 대입이나 큰 차이가 없었는데 c++ 에서는 차이가 좀 있다 클래스 때문인데 생성자 와 대입연산자 때문이다. class test { private: string _name; public: test(string name); }; test::test(string name) : _name(name) { } 위의 문장이 초기화 방법이다. :
항목 3 : 낌새만 보이면 const를 들이대 보자! 좋은 말이다 누가 그러는데 초보와 고수를 구별하는 방법중에 하나가 const 를 잘 쓰느냐 라고 하더라 const 는 값의 변경을 막는 역할을 한다. 근데 나도 초보 시절에 const 안썻다 (그렇다고 고수는 아니다) 왜? 그냥 const가 생각이 않난다. 다만 에러가 없기를 바랄 뿐이였지 어느 정도 코드에 대한 유지 보수가 중요하닥 느껴지기 시작하면 const 를 쓰기 시작한다. 책에서 나와있는거 같이 const 를 마구마구 남용하자 이건 많이써도 나빠지지 않는다. const 의 변수 및 함수에서의 역할은 write 금지 잖아 객체든지 변수 , 함수 및 작은 모듈부터 해서 const는 해당 사용자에게 쓰기금지라는 걸 알려주고 나름대로 캡슐화 하는 목적이 있다 특히 C언어에서는 static , const..
항목 2 : #define을 쓰려거든 const, enum, inline 을 떠올리자 자 본격적으로 Effective c++ 시작합니다. 제목만 봐도 감이 온다 C언어 주물럭 거려본 놈은 제목만 봐도 당연하지 라고 생각될거다 이번 장의 C++ 은 물론이고 C에서도 통용되는 말이다. #define 문은 C언어에서 정말 많이도 쓰인다 특히 리눅스 오픈소스를 보면 아주 define 문 형식이 암호화 되어 있다 define 안에 define 또 define ... 보다가 짱날정도 간단한 상수 값 및 문자열은 const 로 대체 하자 일단 장점은 프리프로세싱 할때 define 문이 변환되는데 이러지 말고 const 변수 를 사용하면 컴파일시에 변수명도 체크되고 혹시 모를 에러도 쉽게 찾을 수 있잖아 좋은게 좋은거 같어 보기도 좋고 타입도 체크할수 있고 에러가 나도 쉽게 찾을 수 있잖아 define..
항목 1 : C++ 에 왔으면 C++의 법을 따릅시다. 여기에는 특별히 설명할게 없는데 나같은 경우 C언어에 익숙해 있다가 C++ 로 넘어오면서 고민했던게 몇가지 있다 1. int *p ; 2. int* p; 자 위의 두가지 포인터 선언문이 있는데 2표현 모두 정상적이고 편한대로 써도 된다. 저 같은 경우는 C언어에 물들어(아주 더럽게) 1번 표현이 아주 보기 좋다 처음 C++ 배울때 책에서 2번 표현식으로 쓰더라 정말 어색하게 느껴졌다 1번 해석 왜냐면 내가 포인터를 배울 때 p는 포인터 변수이다. 그 변수는 int 타입을 저장한다. 좋아. 2번 해석 이건 p는 변수인데 int * 타입을 저장하는 변수이다. 흠 .. 지금 보면 2번이 더 자연스러워 보인다 굳이 따지면 포인터 때문이 아니라 참조변수 선언시 그게 확 느껴졌거든 1. int &r; 2. int&..
시작해보자 Effective 를 한번 훓어봤는데 뭔말인지 모르것다 글로 쓰면 기억에 도움이 될까
stl 기초강좌 stl 기초 강좌 입니다.