[C++] RTTI
·
C++/Basic
RTTI - RTTI는 실행시간 데이터형 정보라는 뜻이다. - 가상 함수들을 가지고 있는 클래스들에 대해서만 사용할 수 있다. dynamic_cast 연산자 - 가능하다면 기초클래스형을 지시하는 포인터로부터 파생클래스형을 지시하는 포인터를 생성한다. - 가능하지않다면 널포인터인 0을 리턴한다. - 포인터가 지시하는 객체형이 무엇인지 알려 주지 않는다. - 객체의 주소를 특정형의 포인터에 안전하게 대입할 수 있는지 알려준다. class Grand { //가상 메서드들을 가지고 있다. }; class Sup : public Grand { ... }; class Magn : public Sup { ... }; Grand * pg = new Grand; Grand * ps = new Sup; Grand * pm..
[C++] 예외 처리
·
C++/Basic
abort() 호출 void Test::hmean(double a, double b) { if (a == -b) { std::cout > y) { try { z = hmean(x, y); } catch (const char* s) { std::cout
[C++] 내포 클래스
·
C++/Basic
class Test { public: Test(int xi, int yi, int zi) : ho() { x = xi; y = yi; } protected: int x; int y; public: class hold { public: hold() { val = 2; } private: int val; public: int value() const { return val; } void setvalue(int s) { val = s; } }; hold ho; }; - 내포클래스는 원래의 클래스의 사용범위와 같다. - 다른 클래스 안에 선언된 클래스를 내포 클래스라고 합니다. - private안에 내포클래스가 있을 때에는 Test만이 내포클래스가 존재함을 알 수 있다. - protected는 내포클래스가 있을..
[C++] 프렌드 클래스
·
C++/Basic
class Tv { public: freind class Remote; bool volup(); private: int state; int channel; } class Remote { private: int mode; public: bool volup(Tv & t) { return t.volup(); } void set_chan(Tv & t, int c) { t.channel = c; } } - Tv의 private 멤버에 직접 접근가능한 Remote 메서드 set_chan - 프렌드 자격을 부여할 필요가 있는 것은 private에 직접 접근할 필요가 있는 메서드 - Remote::set_chan()을 Tv클래스에 대해 프렌드로 만드는 방법은, Tv클래스 선언 안에 그것을 프렌드로 선언하는 것 - Tv..
[C++] 템플릿 클래스
·
C++/Basic
템플릿 클래스 헤더 template class Stack { public: Stack(); bool isempty(); ... private: enum {MAX = 10}; T items[MAX]; } template Stack::Stack() { ... } template bool Stack::isempty() { ... } 템플릿 클래스 사용 Stack kernels; Stack kernels2; 명시적으로 어떤 데이터형을 사용할 것인지 제공해야한다. 템플릿의 융통성 template class Array { ... }; template class GrowArray : public Array //상속 { ... }; 상속을 시킬 수 있다. template class Array { ... }; Array..
[C++] 다중 상속과 가상 기초 클래스
·
C++/Basic
다중 상속은 직계 인접한 기초 클래스를 하나 이상 가지는 클래스를 서술한다. 단일 상속과 마찬가지로, public 다중 상속은 is-a 관계를 나타내야한다.class SingingWaiter : public Waiter, public Singer {...}; //O 둘다 publicclass SingingWaiter : public Waiter, Singer {...}; //X Singer는 자동으로 private 상속이 된다. 다중 상속은 사용할 때에 조심하여야 한다. 다른 두 기초 클래스로부터 이름은 같지만 서로 다른 메서드들을 상속하는 문제, 둘 이상의 서로 관련된 인접 기초 클래스들로부터 어떤 클래스의 다중 인스턴스를 상속하는 문제이다. 하나의 기초 클래스에서 파생 클래스를 두개를 만들고 그것들..