Inventory
-
부모클래스의 메서드가 오버로딩된 메서드인 경우@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:43
특정 이름과 파라미터로 메서드를 오버라이딩 하면 파라미터와 관계없이 같은 이름을 가지는 부모클래스의 모든 메서드들이 숨겨진다.A클래스virtual void sh();virtual void sh(int i); B클래스 : public A클래스virtual void sh(); 하게 되면B클래스.sh(1)는 호출이 안된다.A클래스에서 정의한 함수들이 모두 숨겨진다.할 수 있는 방법은 부모의 포인터로 자식의 객체를 가리키고 실행하면 된다. 그냥 모두다 오버라이딩 하는게 낫다. 아래 내글 다시 참고 출처: http://namoeye.tistory.com/entry/%EB%A9%94%EC%84%9C%EB%93%9C-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9virtual%EC%..
-
생성자 및 대입연산자 관련 자식에서 부모를 호출해야한다.@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:29
자식클래스의 생성자에서도 부모 클래스의 생성자를 호출해줘야한다.알겠는고..? 18. 자식클래스에 삽입된 디폴트 대입 연산자가 기초 클래스의 대입연산자(디폴트가 아니여도)까지 호출한다자식클래스의 대입연산자(디폴트 말고)정의에서 명시적으로 기초 클래스의 대입 연산자 호출문을 삽입하지 않으면 기초 클래스의 대입 연산자는 호출되지 않아서 기초 클래스의 멤버변수는 복사 대상에서 제외된다. 즉자식클래스& operator=(const 자식클래스& ref){기초 클래스::operator=(ref);}여기서 ref는 자식클래스 참조자인데 이를 기초형 참조자로 매개변수를 선언한 operator= 함수의 인자로 전달이 가능한가?C++ 에서는 AAA형 참조자는 AAA객체 또는 AAA를 직 간접으로 상속하는 모든 객체를 참조할..
-
클래스 생성 순서(부모, 자식)@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:20
[C++]상속(inheritance)와 객체 생성, 소멸 과정 상속에 대한 세부적인 설명은 생략하고, 상속한 클래스의 객체를 생성하고, 소멸하는 과정이 어떻게 진행되는지 살펴보고자 한다. 그리고 이 글은 생성자와 소멸자에 대한 기본적인 이해가 필요하니 링크를 참고하기 바란다. 복사생성자까지 이해하고 있다면 참 좋은데... 아니다. 생각해보니 복사생성자에 대한 이해도 필요하다. 링크를 참고해서 복사생성자도 보도록 하자. 상속(inheritance) 여러 자료를 보면 상속을 'A is a B'의 관계로 설명하곤 한다. 출처 그림을 보면 자전거가 부모 클래스이고, 산악 자전거, 도로 자전거, 세 번째는 무슨 자전거지? 찾아보기 귀찮으므로 땡땡 자전거. 여튼 산악, 도로, 땡땡 자전거들은 자전거로부터 파생된 것..
-
메서드 오버라이딩의 특수한 경우@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:06
부모클래스의 메서드가 static인 경우 오버라이딩을 할 수가 없다. 자식클래스에서 부모클래스에 있는 static메서드와 같은 이름의 메서드를 정의하면 두개의 별개인 메서드가 만들어진다.그리고 메서드가 호출되는 객체의 종류에는 영향을 받지 않는다. 즉,문법상 객체를 통해 호출될때 (부모의 포인터) 실제 객체의 타입과는 관계없이 그 객체를 참조하는 있는 타입만이 호출할 메서드를 결정한다는데..(그냥 부모것으로 호출된다고..) class A { public: static void beStatic() { cout
-
friend 키워드의 의미?@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:49
private 건 protected건 friend로 선언된 대상에게는 완벽하게 public으로 작용한다. 대상이 외부이건 상속관계도있건 그런것은 중요치 않다.friend 키워드는 당하는 쪽에서 선언하게 되어 있다. 1. 명시적으로 지정한 대상만 friend만 된다.2. firend지정은 전이되지 않으며, friend의 friend 관게는 인정하지 않는다. 3. 복수의 대상에 대해 동시에 friend를 지정할 수 있지만, 한번에 하나씩만 가능하다.4. friend 관계는 상속되지 않는다. 1번 : 키워드를 선언한 객체에 대해서 선언 받은 대상은 얼마든지 접근할 수 있지만, 반대로는 전혀 접근할 수 없다.(물론 서로 키워드를 남발하면 가능함)2번, 4번 : A가 B를 friend로 선언했어도 B의 frien..
-
참조와 포인터 차이점, 지역변수 참조반환하지말것!@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:36
참조만의 특징1. 초기화가 필요하다포인터의 경우 무엇을 가리키는지 알 수 없는 것도 만들수 있다.int *ptr;하지만 참조의 경우int &ref; 는 안된다. 2. 가리키는 대상을 변경할 수 없다.포인터는 도중에 가리키는 대상을 변경할 수 있다.int a;int *ptr=&a;int b;ptr=&b;이런식으로 변경이 가능하지만참조는..int &ref=a;ref=b; 이러면 에러다.. 3. 첨자를 붙일 수 없으며 숫자도 더할 수 없다.포인터의 경우int *ptr=&a;ptr[3]=2;ptr+=2; //주소값이 변한다 8byte이 가능하지만..참조는..int &ref=a;ref[3]=2; // 안된다.ref+=2;그냥 a에 2를 더한값이다. 지역변수 참조반환하지 말아야 하는 이유오늘은 메모리에 관해 좀 재..
-
void 형 포인터@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:19
void형 포인터란 모든형(char int double 등)의 주소를 저장할 수 있는 포인터이다.char형과 int형 주소 모두를 저장해야하는 경우라면..void포인터를 사용하여 저장해야한다.int num=1;char a='a';void *vp;vp=#vp=&a;이렇게 가능은 한데..즉 주소를 저장할 수는 있지만..*vp 처럼 주소가 가지고 있는 값에는 접근을 못한다.어떤 형태로 접근해야할지 모르니까...근데 형변환을 하면 가능해진다.즉, *(int*)vp; *(char*)vp 이런식으로..
-
문자열 관련@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:18
char *cp = "ABCD";이런식이면..cp[0], cp[1], cp[2] 이런식으로 접근이 가능함..*cp = "ABCD"의 뜻은 포인터 변수에 문자열을 저장하라가 아니라..문자열의 시작주소(예:123123)를 포인터 변수에 저장하라는 의미이다.또한 배열로도 가능하다.char p[10] = "ABCD";배열도 연속적인 메모리이기 떄문에 가능하다.근데..*cp의 문자열은 상수영역의 메모리에 저장되서 수정이 불가능하고(cp[0]='z' 불가능)p[10]은 변수 영역이므로 변경이 가능하다.(p[0]='z' 가능) "" : 문자열을 의미하며 메모리에는 '\n' 문자가 저장되어 있고 문자열의 시작주소를 char * 포인터네 저장가능함..즉 널문자 문자열 포인터문자열 리터럴(문자열 상수) : 큰 따옴표로 둘..