: 클래스 내에서 사용되는 연산자들에 다중적인 의미를 부여하는 다형성의 한 예이다.여태까지 클래스들의 배열의 합을 이렇게 나타낸 반면연산자 오버로딩을 이용하면 간단하게 나타낼수 있다.: 내부 계산은 드러내지 않고, 단지 두 객체를 더하고 있다! Time을 측정하는 클래
홍정모의 따빼씨를 공부하고 정리한 내용입니다. : 매개변수를 가지고 있는 생성자가 존재시 컴파일러가 자동 형변환을 통해 호출할 수 있는 생성자.\-> Main부의 7로 인해 컴파일러가 변환생성자을 암묵적으로 호출시킴.: explicit이라는 키워드를 이용해 암묵적으로
main부에서 자기 자신 대입하는 상황 올수 있는 것을 예시로 듬\-> 이것이로 실습하면서 요 위에거 추가하자.
: 클래스 작성 중에 다른 객체에서도 사용할 것 같은 구성품을 클래스로 뺀 후, private 공간에 두는 것을 말한다. 예를 들어 게임에서 고블린, 슬라임 등의 몬스터가 있는데, 좌표를 나타내는 x,y값을 Position이라는 클래스에 따로 놓고 몬스터들의 클래스에서
: 전방 선언하지 않았다고 에러가 발생하지만, 빨간 줄이 안뜬다.비주얼에서는 문제가 없지만, 컴파일러 입장에서는 에러라고 하는 것이다.컴파일러는 컴파일러고 비주얼은 비주얼이다. 따로따로임!\-> 클래스간의 서로를 참조해야 하므로 전방선언을 해야한다. 전방선언을 사용용도
: 필요한 곳에서만 사용하자!헤더파일은 가볍게 사용하자. cpp에서는 정의를 할때 사용되는 stl 컨테이너나 외부라이브러리를 사용하는 부분이므로 cpp에서 : 라이브러리를 헤더에다가 inclue해주었지만,cpp와 분류 한다면 굳이 헤더에다가 include할 필요는 없다
: 파생클래스가 부모클래스를 상속받을 때 접근 지정자에 따라서, 후에 해당 파생클래스를 사용할때 제약 받는 점이 있다. \-> 파생 클래스 내에서는 부모의 접근지정자로 정의된 멤버변수는 그대로 받아 들이지만,1) 외부의 클래스 즉 파생클래스를 다시 상속할 경우 2) 외
: 정적으로 사용할때는 이상없다. 하지만 동적으로 실형식과 참조형식을 다르게 할당하면 호출이 불가능해진다.: 캐스팅을 사용하자.\-> 가능한 이유는 상속할 경우 파생클래스는 부모의 클래스의 정보를 가져와서 사용가능하므로 캐스팅이 가능하다.하지만 반대는 불가능하다. 왜냐
: 자식 클래스에서 부모의 멤버값들의 접근 지정자를 원하는 대로 변경할 수 있다. using 키워드를 사용하자.Base의 멤버인 base를 protected로 지정했으므로 외부인 main에서는 접근이 불가능하다. using 키워트를 이용하면 외부에서도 접근이 가능하다.
\-> 파생클래스의 set함수는 파생클래스의 멤버와 부모 클래스의 멤버값들은 변경하는 함수라고 할때 이 코드를 보고 의아할 수 있다. Base의 setData함수를 호출하는 방식으로 가능하지 않냐? 이렇게 생각할 수 있다.이런식으로,,,\-> 하지만 이런식으로 많이 진
: 부모를 여러개 두는 것1) 부모 클래스들의 동일한 이름의 함수를 가지고 있을때 모호성 문제가 발생한다. 해결하는 방법으로는 부모 클래스를 명시하면 된다. 문제 발생 코드 명시하기 2) 다이아몬드 상속이 이루어질 경우 문제 발생! => 다중 상속이 꼭 나쁜것은 아니다
자식 클래스의 객체에 부모 클래스의 포인터를 사용한다면?
오버라이딩 할때 리턴 타입은 무조건 같아야 한다. virtual 함수를 클래스 3,4단계까지 상속받아서 사용하면 효율이 좋지 않다. virtual table을 통해 상속받은 클래스로 찾아가는 과정을 거치므로 좋지 않다. 부모 클래스 -> 파생클래스 / 이런식으로 진행된
예시\-> 부모 클래스의 print 함수의 매개변수는 int이고, 파생 클래스의 print 함수의 매개변수는 short이다. 매개변수가 다르기 때문에 오버라이드가 되지 않았다. 컴파일러는 그냥 이름은 같지만, 다른 함수로 보고 있다는 것이다. 유저가 원하는 결과가 아니
1) 정적바인딩이란?: 컴파일 타임에 호출될 함수가 결정되는 것2) 동적 바인딘이란? : 런타임에 호출될 함수가 결정되는 것1) 정적 바인딩빠르다.호출할 함수를 정해놓아야 하므로 유연성 떨어짐.2) 동적 바인딩함수포인터를 이용해 어떤 함수를 호출할지를 결정하므로 느리다
가상함수 즉, virtual 키워드가 1개라도 존재한다면 해당 클래스는 가상함수를 가리키는 포인터 \_vptr이 만들어진다. 이 친구는 가상함수들이 모여있는 가상 함수 테이블을 가리키고 있다.
: 부모클래스를 포인터로 하고, 자식클래스를 대상으로 동적할당할 경우에 해당한다. : 자식클래스를 포인터로 하고, 부모클래스를 가리키게 할 경우,직접적으로 동적할당은 불가능하다. 명식적으로 해야 가능하지만, 옳지 않다...
: 가상함수에 = 0을 붙임으로써 바디가 없고, 선언만 하는 함수를 말하고, 이때 해당 클래스를 추상클래스라고 한다. : 순수 가상함수를 하나라도 가지고 있는 클래스를 말한다. 할당은 불가능하다. 추상클래스를 상속받은 파생클래스는 반드시 순수가상으로 되어있는 함수를 재
: 기본 클래스를 상속하고 있는 2개의 파생클래스가 있고, 별개의 하나의 클래스가 위의 2개의 파생클래스를 상속 할 경우에 다이아몬스 상속문제가 발생한다.모호성 문제가 나온다. 왜냐하면 Animal 클래스의 speak가 오버로딩된 클래스 tiger, dog가 있는데 어
: 파생클래스의 멤버변수에 접근할 수 없다.형변환을 통해서 파생클래스의 멤버에 접근할 수 있다.\-> base_to_d1 값이 null로 변경되어서 문제가 발생한다.dynamic_cast는 캐스팅에 실패하면 null값을 반환한다.nullptr 처리 결과 : 형태는 안맞