728x90
반응형
질문 : C ++에서 가상 함수가 필요한 이유는 무엇입니까?
저는 C ++를 배우고 있으며 가상 기능을 배우고 있습니다.
내가 읽은 (책과 온라인에서) 가상 함수는 파생 클래스에서 재정의 할 수있는 기본 클래스의 함수입니다.
virtual
을 사용하지 않고 파생 클래스의 기본 함수를 재정의 할 수있었습니다.
그래서 내가 여기서 무엇을 놓치고 있습니까? 나는 가상 기능에 더 많은 것이 있다는 것을 알고 있으며, 그것이 중요한 것 같아서 그것이 정확히 무엇인지 분명히하고 싶습니다. 온라인에서 정답을 찾을 수 없습니다.
답변
virtual
기능이 무엇인지 이해하는 방법뿐만 아니라 필요한 이유입니다.
다음 두 클래스가 있다고 가정 해 보겠습니다.
class Animal
{
public:
void eat() { std::cout << "I'm eating generic food."; }
};
class Cat : public Animal
{
public:
void eat() { std::cout << "I'm eating a rat."; }
};
주요 기능 :
Animal *animal = new Animal;
Cat *cat = new Cat;
animal->eat(); // Outputs: "I'm eating generic food."
cat->eat(); // Outputs: "I'm eating a rat."
지금까지 너무 좋았죠? 동물 고양이는 모두없는 쥐를 먹는 일반 음식을 먹는 virtual
.
이제 조금 변경하여 eat()
가 중간 함수 (이 예제의 경우 간단한 함수)를 통해 호출되도록합니다.
// This can go at the top of the main.cpp file
void func(Animal *xyz) { xyz->eat(); }
이제 우리의 주요 기능은 다음과 같습니다.
Animal *animal = new Animal;
Cat *cat = new Cat;
func(animal); // Outputs: "I'm eating generic food."
func(cat); // Outputs: "I'm eating generic food."
어 ... 우리는 고양이를 func()
전달했지만 쥐를 먹지 않습니다. func()
를 오버로드해야 Cat*
? Animal에서 더 많은 동물을 파생시켜야한다면 모두 고유 한 func()
가 필요합니다.
Animal
클래스의 eat()
를 가상 함수로 만드는 것입니다.
class Animal
{
public:
virtual void eat() { std::cout << "I'm eating generic food."; }
};
class Cat : public Animal
{
public:
void eat() { std::cout << "I'm eating a rat."; }
};
본관:
func(animal); // Outputs: "I'm eating generic food."
func(cat); // Outputs: "I'm eating a rat."
출처 : https://stackoverflow.com/questions/2391679/why-do-we-need-virtual-functions-in-c
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++에서 ifstream을 사용하여 한 줄씩 파일 읽기 (0) | 2021.06.09 |
---|---|
정적 std :: map 초기화<int, int> C ++에서 (0) | 2021.06.08 |
C ++ 여러 줄 문자열 리터럴 (0) | 2021.06.08 |
C ++에서 개인 정적 멤버를 초기화하는 방법 (0) | 2021.06.08 |
C ++에서 extern을 사용하는 경우 (0) | 2021.06.04 |