C의 벡터와 다형성
다형성을 사용하면 서로 다른 클래스의 객체가 공통 인터페이스를 공유할 수 있습니다. C에서 이는 일반적으로 상속 및 가상 함수를 통해 달성됩니다.
다음 코드 조각을 고려하세요.
<code class="cpp">class Instruction { public: virtual void execute() { } }; class Add: public Instruction { private: int a; int b; int c; public: Add(int x, int y, int z) {a=x;b=y;c=z;} void execute() { a = b + c; } };</code>
여기에서 Instruction 클래스는 가상 실행 메서드를 정의합니다. 클래스를 추가합니다.
이제 Instruction 개체가 포함된 벡터를 만들어 보겠습니다.
<code class="cpp">vector<Instruction> v; Instruction* i = new Add(1,2,3); v.push_back(*i);</code>
다른 방법으로는 벡터의 마지막 요소를 검색하고 해당 실행 메서드를 호출합니다.
<code class="cpp">Instruction ins = v.back(); ins.execute();</code>
효과가 있을까요?
아니요, 그렇지 않습니다. 벡터는 참조가 아닌 값을 저장합니다. 이는 Add 객체가 벡터에 복사되어 객체 슬라이싱이 발생한다는 의미입니다.
수정 방법
다형성을 유지하려면 벡터를 사용해야 합니다. 포인터:
<code class="cpp">vector<Instruction*> v; v.push_back(i);</code>
또는 std::reference_wrapper
<code class="cpp">vector<std::reference_wrapper<Instruction>> v; v.push_back(i);</code>
의 벡터를 사용할 수 있습니다. 이렇게 하면 객체가 슬라이스되지 않고 유지될 수 있습니다. 동적 유형을 선택하고 가상 함수를 올바르게 호출하세요.
위 내용은 다형성이 C의 명령 개체 벡터와 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!