[C++] 가상 함수 (다형성)
·
개발/C++
다형성의 문제점 부모 클래스 포인터 변수로 자식 클래스 객체의 주소를 받았을 때 포인터가 부모 클래스 타입이기 때문에, 부모 클래스의 기능만 접근이 가능하다. 해결 방안 가상 함수를 통해서 자식 클래스에서 오버라이딩 한 함수를 호출할 수 있게 한다. 가상 함수(Virtual)의 작동 원리 부모 클래스에 가상 함수(virtaul 함수)가 1개 이상 존재하면 각 클래스(부모, 자식)는 타입 정보가 만들어진다. 클래스에 대한 타입 정보는 메모리에 하나만 생성이 되고 이 타입 정보에는 해당 클래스가 보유하고 있는 가상 함수의 주소를 모아놓은 '가상 함수 테이블'이 있다. '가상 함수 테이블'에 virtual이 붙은 함수가 등록이 된다. 부모 클래스에 보이지 않는 멤버(가상 함수 테이블 포인터)가 추가된다. 가상..
[C#] 자습서 8장 - 상속(2)
·
개발/C#
멤버 숨기기 상속을 받으면 자식은 부모의 모든 멤버를 물려받게 된다(선택적으로 받을 수 없음). 하지만 물려받은 멤버를 새로 정의하여 원하는 기능을 부여할 수 있다. 부모의 메서드를 자식이 다시 정의하면 부모의 메서드는 숨겨지게 되는데 이때 메서드에 new 지정자를 붙인다. 부모의 메서드를 자식이 다시 정의해도 가려지기만 할 뿐 여전히 상속은 되어서 숨겨진 부모의 멤버를 참조할 때는 base 키워드를 사용하면 된다. class Base { public int a; } class Derived : Base { public new double a; } internal class Program { private static void Main(string[] args) { Base B = new Base(); ..
[C#] 자습서 7장 - 상속(1)
·
개발/C#
객체지향의 3대 요소 은닉성, 상속성, 다형성 은닉성(캡슐화) : 값의 보호를 위해 객체의 필드, 메서드를 감추거나 들어내는 것. 상속성 : 부모 클래스로부터 새 클래스를 정의 상속 받는 순간 부모의 모든 기능을 물려받음. 다형성 : 한 부모에게서 다양한 클래스들이 만들어짐. 부모의 클래스 변수에 자식 객체를 담을 수 있음. 상속 상속은 이미 정의해 놓은 클래스로부터 새 클래스를 정의하는 기법이다. 기존의 클래스를 '부모/기반 클래스'라고 하며 상속에 의해 새로 만들어지는 클래스를 '자식/파생 클래스'라고 한다. (필자는 부모, 자식 클래스가 좀 더 익숙한 느낌이어서 앞으로도 그렇게 쓰겠다) 생성자, 파괴자 등의 특수한 몇 개를 제외한 모든 멤버가 상속되며 액세스 지정은 유지된다. private 멤버 또..