【正确答案】(1)错误:class D2:public Base
正确:class D2:virtual public Base
(2)错误:class D3::public D1,public D2
正确:class D3:public D1,public D2
(3)错误:d.f();
正确:d.Base::f();
【答案解析】(1)主要考查考生对虚基类的理解,虚基类可以解决二义性的问题,其定义方式是在继承列表中使用virtual关键字,使用虚基类可以避免程序运行中对基类函数调用的不惟一;
(2)主要考查考生对类的定义方法的掌握,"::"为作用域符,此处应该使用":",因为后面是继承列表;
(3)主要考查考生对虚基类函数调用过程的理解,只有使用"::"限定才能访问基类函数,否则将会调用自身的函数,如果该类没有该函数的定义,则会自动调用其父类的该函数,所以必须使用"::"符号。