C++의 가상 변수

Namita Chaudhary 2023년10월12일
  1. C++의 가상 변수
  2. 결론
C++의 가상 변수

다형성은 특정 메시지를 둘 이상의 형식으로 표시할 수 있는 C++의 객체 지향 프로그래밍의 기둥 중 하나입니다. 함수 오버로딩과 함수 재정의에 의해 달성되는 두 가지 유형의 다형성(컴파일 시간과 런타임)이 있습니다.

그러나 함수 재정의에는 C++에서 virtual 키워드의 사용이 포함됩니다. 이 문서에서는 C++의 가상 변수에 대해 설명합니다.

C++의 가상 변수

다형성은 다양한 형태를 가진 것으로 설명할 수 있습니다. 다형성의 실제 예는 동시에 어머니, 딸, 자매 및 며느리인 여성일 수 있습니다.

그러나 프로그래밍 관점에서 보면 동일하거나 다른 유형의 멤버 함수를 다른 용도로 두 번 이상 사용하여 다형성을 얻을 수 있습니다.

다형성에는 두 가지 유형이 있습니다. 초기 바인딩이라고도 하는 컴파일 시간은 함수 오버로딩 또는 연산자 오버로딩에 의해 달성됩니다. 간단히 말해서 이름은 같지만 인수의 수나 유형이 다른 함수를 사용할 수 있는 기능입니다.

반면 런타임 다형성은 함수 재정의를 통해 달성됩니다.

함수 재정의는 동일한 이름, 유형 및 여러 인수를 가진 함수를 사용하는 기능입니다. C++에서 virtual 키워드를 사용하여 달성됩니다.

함수 재정의를 구현하기 위해 C++에서 가상 함수를 만듭니다. 그러나 C++에는 가상 변수라는 개념이 없습니다.

가상 함수는 가상 변수가 아닌 다형성을 허용하는 함수입니다. 가상 함수는 기본 클래스에서 선언되고 파생 클래스에서 재정의되는 멤버 함수입니다.

부모 클래스 포인터를 사용하여 자식 클래스 객체를 참조할 때마다 해당 객체에 대한 가상 함수를 호출하고 해당 함수의 자식 클래스 버전(파생 클래스 버전)을 실행할 수 있습니다.

C++에서 가상 함수를 사용하면 유형이 다른 두 클래스를 호출 코드에서 동일한 것으로 처리할 수 있으며 클래스의 내부 동작이 가상 함수에 캡슐화됩니다. 그러나 가상 변수의 경우 동작은 변수에 액세스하여 캡슐화됩니다.

그러나 C++에서는 가상 함수를 사용하여 다형성을 수행할 수 있습니다. 같은 코드를 보자.

#include <iostream>
using namespace std;
class parent {
 public:
  virtual void print() { cout << "printing the parent class function\n"; }
  void show() { cout << "showing the parent class function"; }
};

class child : public parent {
 public:
  void print() { cout << "printing the child class function\n"; }

  void show() { cout << "showing the child class function\n"; }
};

int main() {
  parent *p;
  child c;
  p = &c;
  p->print();
  p->show();

  return 0;
}

출력:

printing the child class function
showing the parent class function

위의 코드 예제에서 부모 클래스 포인터를 사용하여 자식 클래스를 참조하고 있으므로 해당 개체에 대한 가상 함수를 호출하고 함수의 자식 클래스 버전을 실행할 수 있습니다.

따라서 우리는 부모 클래스의 print 함수를 가상으로 만들고 print() 함수를 호출하여 실행되는 함수는 자식 클래스에 있는 반면 show() 함수는 가상이 아닌 은 여전히 함수의 상위 버전을 인쇄합니다.

결론

이 기사에서는 C++의 다형성, 가상 함수 및 가상 변수에 대해 논의했습니다. 다형성은 여러 형태로 설명되며 런타임과 컴파일 시간의 두 가지 유형이 있습니다.

그러나 가상 함수는 함수를 가상으로 만들어 C++에서 런타임 다형성을 구현하는 데 사용되는 함수입니다. 그러나 변수에 액세스하여 캡슐화할 동작이 없기 때문에 C++에는 가상 변수라는 것이 없습니다.