class Transaction {
public:
virtual void logTransaction() const = 0;
};
Transaction::Transaction() {
logTransaction();
}
class BuyTransaction : public Transaction {
public:
virtual void logTransaction() const;
};
class SellTransaction : public Transaction {
public:
virtual void logTransaction() const;
};
int main() {
BuyTransaction b;//error!
}
생성자의 성성 순서는 Transaction
의 생성자가 불리고 BuyTransaction
이 불리게 되는데 Transaction
의 생성자 가 끝나기 전에 함수를 호출한다. 그러나 생성자가 끝나기 전에는 절대로 파생 클래스로 내려가지 않는다. 즉, 가상 함수가 먹히지 않는다.
즉, Transaction
의 생성자가 끝나기 전까지, BuyTransaction
의 생성자가 시작하기 전까지의 타입은 Transaction
인 것이다.
요약하자면 Transaction
생성자에서 Transaction
의 순수 가상 함수를 호출하였기 때문에 에러가 발생한 것이다.