목록Programming/C++ (43)
Nagie's DevStory
다중 상속은 클래스가 두 개 이상의 부모 클래스에서 특성( 데이터 멤버, 멤버 함수)을 상속할 수 있게 한다. 이에 따라 파생 클래스는 여러 부모 클래스의 데이터 멤버와 멤버 함수를 모두 가질 수 있으며 서로 관련 있는 클래스에서 특성을 상속 하거나 클래스 계층 구조에서 여러 부모 클래스로 부터 상속받아 새로운 클래스를 만들 때 또는 다형성을 활용하여 다양한 부모 클래스에서 파생한 객체를 다룰 때 사용한다. 다만 주의할 점이 있는데 다중 상속을 사용할 때는 상속 충돌 문제가 발생할 수 있다. 이걸 죽음의 다이아몬드 문제라고 부르며 하나의 클래스가 둘 이상의 경로를 통해 같은 기본 클래스를 상속할 때 발생한다. C++에서는 가상 상속(virtual inheritance)을 사용해 이 문제를 해결하지만 코드..
간혹 클래스를 설계하다 보면 추상 클래스로 만들고 싶어도 멤버 함수에 순수 가상함수를 쥐어줄 수 없는 경우가 존재하기도 한다. 그때 사용하는 것이 순수 가상 소멸자인데 소멸자를 순수 가상함수로 만드는 것으로 멤버 함수 중 순수 가상함수가 없어도 해당 클래스가 인스턴스를 생성할 수 없는 추상 클래스로 변한다. 다만 순수 가상 소멸자를 선언했다면 클래스 내부에서 가상 소멸자를 또 선언할 수 없기에 클래스 밖에서 정의를 해줘야 한다. class AbstractBase { public: virtual ~AbstractBase() = 0; // 순수 가상 소멸자 }; AbstractBase::~AbstractBase() { // 순수 가상 소멸자의 기본 구현 } class Derived : public Abstr..
순수 가상함수(Pure Virtual Function)는 함수 본문이 없고 ;(세미콜론)으로 끝나며 앞에는 'virtual' 키워드가 붙고 뒤에는 '= 0'으로 표시되며 아래의 코드처럼 작성할 수 있다. class AbstractClass { public: virtual void pureVirtualFunction() = 0; // 순수 가상 함수 }; 추상 클래스는 하나 이상의 순수 가상 함수를 포함하는 클래스를 말하며 아래는 추상 클래스의 예시다. class AbstractShape { public: virtual void draw() = 0; // 순수 가상 함수 virtual double area() const = 0; // 순수 가상 함수 }; class Circle : public Abstra..
가상 함수(virtual function)는 C++의 객체 지향 프로그래밍에서 다형성(polymorphism)을 구현하는 데 사용되는 중요한 개념이다. 사용하는 방법은 어렵지 않다. 클래스 내에서 선언 할 때 'virtual' 키워드를 사용해 선언해 주면 된다. 아래는 가상 함수를 선언하는 예시다. class Base { public: virtual void myFunction() { // 가상 함수의 기본 구현 } }; 'virtual' 키워드를 사용해 함수를 구현하게 되면 파생 클래스에서 재정의가 가능하게 되는데 이땐 'override' 키워드를 사용해야 한다. class Derived : public Base { public: void myFunction() override { // 가상 함수의 파..
변환 생성자는 다른 데이터 형식의 값을 받아들여 해당 데이터 형식의 객체로 변환하도록 클래스를 정의하는 생성자다. 다른 데이터 형식에서 클래스 객체를 만들 수 있도록 하는 방법으로 사용된다. 요약하면 다음과 같다. 1. 다른 데이터 형식에서 객체를 만들 필요가 있을 때. 2. 형 변환 연산이 필요한 경우. 변환 생성자는 다음과 같이 정의할 수 있다. class MyClass { public: MyClass(int x) { // 변환 생성자의 구현 } }; 예를 들어 'MyClass'의 변환 생성자를 사용하면 다음과 같이 정수 인스턴스를 가지고 'MyClass' 객체를 만들 수 있게 된다. int number = 42; MyClass myObject = number; // 변환 생성자 호출 다만 이 과정이..