ec++ c 1,2 surmary

12
EC++ C 1,2 Surmary NHN NEXT 남남남

Upload: sehyeon-nam

Post on 23-Jun-2015

120 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Ec++ c 1,2 surmary

EC++ C 1,2 Surmary

NHN NEXT 남세현

Page 2: Ec++ c 1,2 surmary

C++ 은 이렇게 구성되어 있다• C– C++ 의 기반은 C 언어 .

• C++ of Objective– ‘ 클래스’ , 그리고 그것의 특징들 ( 캡슐 , 상속

… )

• C++ of Templete• STL

Page 3: Ec++ c 1,2 surmary

#define 대신에 쓸 수 있는 것들• 단순한 상수를 쓸 때는– const• const char* const name = “namse”

– enum

• 함수같은 매크로를 만들고 싶을땐– inline

Page 4: Ec++ c 1,2 surmary

const

• Const 멤버변수를 정의할 때• .h -> static const double A;• .cpp -> MyClass::A = 1.35;

• 상수 포인터 , 상수 데이터• 상수 포인터 : 포인터 자체가 상수• 상수 데이터 : 포인터가 가르키는 대상이 상수

Char *name = myName;비상수포인터

비상수데이터

Const Char *name = myName; 비상수 p 상수 d

Char * const name = myName; 상수 p 비상수 d

Const Char * const name = my-Name; 상수 p 상수 d

Page 5: Ec++ c 1,2 surmary

const

• Const std::~::iterator iter;– Iter 가 상수 . *iter 는 상수 아님 .

• Std::~::const_iterator iter;– Iter 는 비상수 , *iter 는 상수 !

• 상수 함수– Void function() const { blah blah;}–데이터 멤버 터치 X ( static 빼고 !)–음… 몇 개는 적당히 터치해도 되지 않을까 ?• Mutable. ( mutable int size; )

Page 6: Ec++ c 1,2 surmary

const

• 상수 함수–비상수 함수 코드를 컨시브이 해야하는가 ?– Const_cast, static_cast 를 이용할 것 !– char& func() {

return const_cast<char&>(static_cast<const MyClass&>(*this)->func()

); }

Page 7: Ec++ c 1,2 surmary

초기화• 생성자에서 값을 다 넣어주는 것 ?– I::I(){ name = “namese”; }–이건 초기화가 아님 ! 대입임 !

• 멤버 초기화 리스트를 사용하자 !– I::I():name(“Namse”) {}

• 왜죠 ?– C++ 이잖아…

Page 8: Ec++ c 1,2 surmary

C++ 이 자동 생성하는 함수• Class MyClass{};– MyClass()– MyClass(const MyClass& rhs) {…}– ~MyClass() {…}– MyClass& operator=(const MyClass& rhs) {..}

• C++ 이 만든 함수가 당신이 만든 객체에 어울리는지 잘 판단해야 합니다 !– 그 함수들을 사용해선 안된다고 판단된다면 ?– private 멤버로 선언하고

일부러 정의 ( 구현 ) 하지 마세요 !

Page 9: Ec++ c 1,2 surmary

C++ 이 자동 생성하는 함수• Class MyClass{};–~MyClass() {…}

• 다형성을 사용해야 할 경우엔–소멸자를 항상 virtual 로 선언하자–왜 ?–파생 클래스의

모든걸 지우지 못할 수 있으니까 !

Page 10: Ec++ c 1,2 surmary

C++ 이 자동 생성하는 함수• Class MyClass{};–~MyClass() {…}

• 소멸자에서 예외가 나온다고 ?–예외가 나올 수 있는 소멸자는 시한폭탄 !

• Try, chtch 문을 소멸자에 사용하여 예외를 다 처리하거나 ,

• 프로그램을 아예 끝내버리거나…• 예외는 오직 보통의 함수에서 나오도록 !

Page 11: Ec++ c 1,2 surmary

C++ 이 자동 생성하는 함수• Class MyClass{};

– MyClass(){…}– ~MyClass() {…}

• 파생 클래스 생성자는 기본 클래스 생성자를 실행한다 .– 그때 , 기본 클래스 생성자에서 실행되는 가상함수– 당연히 파생 클래스꺼로 실행되겠지 ^^– 하지만 , 기본 클래스의 함수가 실행된다 .– 기본 클래스의 생성자가 호출될 동안에는 가상 함수는 절대로

파생 클래스 쪽으로 내려가지 않는다 .

• 생성자 , 소멸자 안에서는 가상 함수 호출 하지 마세요 !

Page 12: Ec++ c 1,2 surmary

C++ 이 자동 생성하는 함수• Class MyClass{};–MyClass& operator(const MyClass& rhs)

{…}

• int x,y,z; x = y= z = 15;–이게 관례잖아 ? 그러면 나의 클래스도…

• 대입 연산자에선 *this 를 반환하게 하자 !X = ( Y = ( Z = 15 ) );mc = mc1 = mc2 = new MyClass(25);mc = ( mc1 = ( mc2= new My class(25) ) );