[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 상속이 된다. 다중 상속은 사용할 때에 조심하여야 한다. 다른 두 기초 클래스로부터 이름은 같지만 서로 다른 메서드들을 상속하는 문제, 둘 이상의 서로 관련된 인접 기초 클래스들로부터 어떤 클래스의 다중 인스턴스를 상속하는 문제이다. 하나의 기초 클래스에서 파생 클래스를 두개를 만들고 그것들..
[C++] public 다형 상속
·
C++/Basic
파생 클래스에서 기초 클래스의 메서드를 다르게 사용해야 될 때가 있다. 호출하는 객체에 따라 메서드의 행동이 달라질 수도 있는데 이 때 다형상속이 필요하다. 다형 상속의 방법 - 기초 클래스 메서드를 파생 클래스에서 다시 정의한다. - 가상 메서드를 사용한다. class Test { ... virtual void Print() const; }; class Test2 { ... virtual void Print() const; }; Test x(123, "sss"); Test2 y(13, "ss"); Test & t1 = x; Test & t2 = y; t1.Print();//Test::Print()를 사용한다. t2.Print();//Test2::Print()를 사용한다. - virtual 키워드를 사용..
[C++] 클래스의 상속
·
C++/Basic
class RatedPlayer : public TableTennisPlayer { .... }; - TableTennisPlayer가 public기초클래스라는 것을 나타낸다. 이것을 public 파생이라 한다. - 파생 클래스형의 객체 안에는 기초 클래스형의 데이터 멤버들이 저장된다. - 파생 클래스형의 객체는 기초 클래스형의 메서드들을 사용할 수 있다. 파생 클래스안에 추가해야될 것 - 파생 클래스는 자기 자신의 생성자를 필요로 한다. - 파생 클래스는 부가적인 데이터 멤버들과 멤버 함수들을 필요한 만큼 추가할 수 있다. 파생 클래스의 접근 권한 - 파생 클래스는 기초 클래스의 private 멤버에 직접적으로 접근할 수 없다. 기초 클래스의 public메서드들을 통해서 접근해야한다. 파생 클래스의 생..