나는 처음에는 내 영어가 좋지 않다는 사과를하고 싶다. 나는 문제가있어서 무엇을해야할지 모른다. 객체 추상 클래스 웨곤에 포인터를 유지하는 벡터를 사용하고 있습니다. 이 클래스의 하위 클래스에는 왜온에 대한 정보를 추출하는 자체 정의 된 함수가 있습니다. 나는 내가 올바르게 풀 었는지 모르지만 일단 지정된 인덱스에있는 요소가 나와 벡터에서 사라지면주기를 지날 때 여기에 남아있는 것은 _vfptr뿐입니다. 그래서 다시 사이클을 타고 싶다면 지금 아무것도 목록에없는 것입니다. 나는 어떤 충고가있어서 기쁠거야. 너를 어떻게 처리 할까, 나, 너는 무언가를 요구할 수도있다. 내 부모 클래스의 Vypis() 함수는 순수 가상이며 호출 할 수 없습니다.추상적 인 클래스의 자손에 대한 벡터 접근
0
A
답변
0
가상 함수를 통해 올바른 방법을 전달할 수 있습니다. 다음 예를 보자
#include <memory>
#include <vector>
#include <iostream>
class Wagon {
public:
virtual ~Wagon() = default;
virtual void Vypis() const {
std::cout << "Wagon" << std::endl;
}
};
class DinningCar
: public Wagon {
void Vypis() const {
std::cout << "DinningCar" << std::endl;
}
};
class BedWagon
: public Wagon {
void Vypis() const {
std::cout << "BedWagon" << std::endl;
}
};
class PassengerWagon
: public Wagon {
void Vypis() const {
// suppose you also want this particular wagon to call the
// "generic" method (that is, the one implemented by the parent
// class)
Wagon::Vypis();
std::cout << "PassengerWagon" << std::endl;
}
};
int main() {
std::vector<std::unique_ptr<Wagon>> wagons;
wagons.emplace_back(new DinningCar);
wagons.emplace_back(new BedWagon);
wagons.emplace_back(new PassengerWagon);
wagons.emplace_back(new DinningCar);
wagons.emplace_back(new Wagon);
for(const auto& wagon : wagons) {
wagon->Vypis();
}
return 0;
}
컴파일 :
g++ Wagons.cpp -std=c++11 -Wall -Wextra
및 실행
당신이 (PassengerWagon
에서와 같이) 부모의 구현을 호출할지 여부를 선택할 수있는 방법을
$ ./a.out
DinningCar
BedWagon
Wagon
PassengerWagon
DinningCar
Wagon
공지 사항 또는 단지 어린이 구현; C++은 가상 함수 디스패치를 내부적으로 처리합니다.
0
죄송합니다. 필자는 순수 가상 함수가있는 parrent 클래스에서 이것을 쓰는 것을 잊어 버렸습니다.
답변을 주셔서 감사합니다. 처음에는 간단히했습니다. _vagony.at (i) -> Vypis(); 하지만 그것은 내 부모 클래스의 함수 Vypis() 순수 가상이며 내가 부를 수 없기 때문에 나를 떨어 뜨린 작동하지 않았다. -
관련 문제
- 1. 추상적 인지도 및 벡터
- 2. 어떤 추상적 인 방법
- 3. 추상적 인 객체의 인스턴스 저장하기
- 4. 특성과 추상적 인 유형
- 5. 장고 추상적 인 모델
- 6. mockForConstraintsTests 추상적 인 그루비 클래스
- 7. 객체에 대한 완전히 추상적 인 데이터 소스입니까?
- 8. 건물 추상적 인 협회가
- 9. OutputSteam은 추상적 인
- 10. 추상적 인 파생 클래스
- 11. 추상적 인 인터페이스 선언
- 12. 추상적 인 상황
- 13. 를 확장하고 추상적 인 quetsion
- 14. 기본 클래스 VS 추상적 인 메서드에 대한 빈 가상 메서드
- 15. 왜 콘크리트 클래스의 추상적 인 하위 클래스가 나쁜 디자인입니까?
- 16. MOQ 어설 추상적 인 방법이
- 17. 내부 클래스의 C++ 벡터
- 18. 추상적 인 방법은 자바의 인터페이스에
- 19. 스칼라 : 형질의 추상적 인 방법
- 20. 추상적 인 클래스에서 비어있는 메소드
- 21. 내가 종속성과 추상적 인 활동이
- 22. C# 재정 추상적 인 방법은
- 23. C++은 추상 클래스의 벡터 요소에 접근 할 수 없습니까?
- 24. 무들 데이터베이스 API - $ DB는 추상적 클래스의 객체입니다
- 25. 필드 대신 추상적 인 메서드 사용
- 26. 템플릿 기반 클래스의 인스턴스에 대한 포인터 벡터
- 27. StackOverflow 'flair'와 같은 추상적 인 이미지 생성에 대한 제안
- 28. 실제로 파이썬에서 추상적 인 데이터 유형은 무엇입니까?
- 29. 이맥스 추상적 인 기능에 arg를 전달하는 방법을
- 30. 델파이에서 수정 된 상위 클래스의 자손에 영향을 미치는 방법?
잘못하고 있습니다! 'Vypis' 함수를'virtual'으로 만들고 자식 클래스의 올바른 메소드가 자동으로 호출됩니다. –