[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메서드들을 통해서 접근해야한다. 파생 클래스의 생..
[C++] 멤버 초기자 리스트
·
C++/Basic
Queue::Queue(int qs) { front = rear = NULL; items = 0; qsize = qs;//허용되지않는다. qsize가 const일때 } 생성자를 호출하면 중괄호 안의 코드가 실행되기 전에 객체가 먼저 생성된다. 그래서 qsize에 초기화가 아닌 대입이 되어서 허용되지 않는다. Queue::Queue(int qs) : qsize(qs) { front = rear = NULL; items = 0; } - 위의 멤버 초기자 리스트를 사용하면 초기화를 할 수 있다. - : 초기화될 변수 이름(초기화할 변수 이름)으로 사용한다. - 생성자에서만 쓸 수 있다. - 참조로 선언된 클래스 멤버들에 대해서도 이 문법을 사용해야 된다. - 클래스내에서 초기화를 해놓았다면 멤버 초기자 리스트..
[C++] 대입 생성자
·
C++/Basic
대입에서 발생할 수도 있는 문제점은 타깃 객체가 이전에 대입한 데이터가 있을 때에 new로 선언된 부분이 있었다면 delete를 사용하여 해제를 해주어야한다. 만약 이 과정을 하지 않고 넘기게 된다면 메모리 누수가 생긴다. Test& operator=(const Test& t);//함수 원형 Test& Test::operator=(const Test& t)//대입하여 char* 형에 문장을 넣는다. { if (this == &t)//대입되는 객체가 자기 자신일 때는 바로 리턴한다. return *this; delete[] names; len = t.len; names = new char[len + 1]; strcpy_s(names, len + 1, t.names); return *this; }
[C++] 복사 생성자
·
C++/Basic
복사 생성자 복사 생성자는 어떤 객체를 새로 생성되는 객체에 복사하는데 사용된다. 복사 생성자는 일반적인 대입에 사용되는 것이 아니라 값 전달에 의한 함수 매개변수 전달을 포함한 초기화 작업에 사용된다. 클래스의 복사 생성자의 일반적인 원형 Class_name(const Class_name &); 복사 생성자는 언제 사용되는가? 새로운 객체가 생성되어 같은 종류의 기존의 객체로 초기화될 때마다 호출된다. 새로운 객체를 기존의 객체로 명시적으로 초기화할 때 생성되곤 한다. 다음과 같은 상황에서 복사 생성자는 사용된다. Class_name banana(apple); Class_name berry = nono; Class_name bus = Class_name(taxi); Class_name * market ..