这里考查的不是虚拟语气,是情态动词+have done 表示对过去的情况进行推测。
could have done 对过去的事情进行肯定的推测,意思是“也许会...”
would have done只用在虚拟语气的主句中,所以这里不对。
should have done表示过去本应该做某事而实际上没做,含有责备的意思。
如:You couldn't remember his address.You should have written down the address for him.
might have done可以表示对过去的事情的肯定推测,但是语气比could较弱。
下面给你一份资料供你参考
.对过去情况的推测,用“情态动词 + have +过去分词”。
(1)It must / may / might / could have rained last night .The ground is wet.
地湿了,昨晚肯定/可能/也许下雨了。
(2)The door was locked. He can ( could ) not / may ( might ) not have been at home .
门锁着,他不可能/可能不在家。
(3)Can / Could he have gotten the book?
难道他找到书了吗?
注:情态动词 should /ought to表推测时,意为“想必会,理应……”
与“have +过去分词”连用时,意为“本应该做某事却没做”。例如:
(4)It’s seven o’clock. Jack should/ought to be here at any moment.
现在七点钟了,杰克理应随时到达。(推测)
(5)She should / ought to have attended your birthday party, but she had to look after her mother in hospital.
她本该出席你的生日晚会的,可是她得在医院照顾她妈妈。
(6)Tom should not /ought not to have told me your secret, but he meant no harm. 汤姆本不该告诉我你的秘密,可是他并无恶意。
温馨提示:答案为网友推荐,仅供参考