[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 ..
[C++] 클래스의 데이터형 변환
·
C++/Basic
암시적 데이터형 변환 //Test.h class Test{ Test(); Test(double d); }; //Test.cpp Test::Test() { } Test::Test(double d) { } //Main.cpp int main() { Test save2; save2 = 19.6; } - Test(double d)는 double을 Test 객체로 변환하는 것이다. - 위의 메인에서 Test 객체를 생성하고 Test(double)을 사용하여 19.6을 Test로 변환한다. - 메인의 두번째 줄에서 Test(double)을 사용하여 Test 임시 객체를 생성한다. 이 때 19.6을 초기화 값으로 사용한다. 그리고나서 멤버별 대입으로 임시 객체의 내용을 save2에 복사하게된다. 이 과정을 명시적으로..