1
저는 지금 막 붙어 있습니다. BaseBond라는 기본 클래스가 있습니다. ZeroCouponBond 및 CouponBond는 해당 클래스를 상속합니다. 채권의 두 가지 유형을 모두 포함하는 배열을 만들려고합니다. 오류 :기본 클래스의 배열에 대한 C++ - 기본 오류
여기...
BaseBond port[12];
for (int i=0; i < recordCount; i++)
{
if (bonds[i].CouponRate == 0.0)
port[i] = new ZeroCouponBond(bonds[i]);
else
port[i] = new CouponBond(bonds[i]);
}
나는 점점 오전 오류가 있습니다 : 여기 내 코드와 아무 짝 '연산자 ='포트 '에 [i]를
나는 이것이 아마도 간단한 수정하고 있습니다 알고 배열에서 객체를 선언 할 수있을 때해야 할 일이 있지만 C++에 비교적 익숙하지 않으며 모든 규칙을 알지 못합니다.
미리 도움을 청하십시오!
신비로운! 마지막 질문. 이제 CouponBond 클래스의 메서드에 액세스하려는 경우 어떻게해야할까요? 배열 포트가 이제 BaseBonds 배열임을 알고 있습니다. 그 방법에 접근하기 위해서는 우선 CouponBond로 캐스팅해야만합니까? 이 코드의 문제점 : port [i] = 새로운 CouponBond (bonds [i]); printf ("P : % f", ((CouponBond) port [i]) -> getPrice()); – CHawk
그 방법이'CouponBond' 클래스에만 해당된다면, 실제로 그렇게 할 수는 없습니다. 그래서 당신은 그것을 던져야 할 것입니다 -이 시점에서 당신은 그것을 적절하게 설계했는지에 대해 더 신중하게 생각해야합니다. 이상적으로, 그 메소드는'BaseBond' 클래스에 있고 각각의 서브 클래스에 의해 오버라이드됩니다. – Mysticial
방금 의견을 보았습니다. 이 경우,'BasePlay' 클래스에'getPrice' 메쏘드를 정의하고 그것을 가상으로 만들어야합니다. (그것은'getPrice'가 모든 "bond"에 적용되기 때문에 의미가 있습니다) 그리고 나서'CouponBond'에 특정한 버전으로 그것을 오버라이드 할 수 있습니다. – Mysticial