几道c++题目,我觉得答案给的有些问题,希望高手不吝赐教,非常感谢
判断正误1.若虚基类由非虚基类派生而来,则仍先调用基类构造函数,再调用派生类的构造函数。(正确)(这句话不是与“虚基类的构造函数在非虚基类之前调用”矛盾了么?)2.基类中...
判断 正误
1.若虚基类由非虚基类派生而来,则仍先调用基类构造函数,再调用派生类的构造函数。(正确)
(这句话不是与“虚基类的构造函数在非虚基类之前调用”矛盾了么?)
2.基类中说明的纯虚函数在其任何派生类中都必须实现。(正确)
(如果A派生出B,B派生出C,那么A中的纯虚函数能不能在B中不实现,而只在C中实现?)
3.设int a=1,b=2,表达式(a++)+b和a+++b的值分别是 ( 3,3 )
(第一个表达式有小括号,为什么值不是4?) 展开
1.若虚基类由非虚基类派生而来,则仍先调用基类构造函数,再调用派生类的构造函数。(正确)
(这句话不是与“虚基类的构造函数在非虚基类之前调用”矛盾了么?)
2.基类中说明的纯虚函数在其任何派生类中都必须实现。(正确)
(如果A派生出B,B派生出C,那么A中的纯虚函数能不能在B中不实现,而只在C中实现?)
3.设int a=1,b=2,表达式(a++)+b和a+++b的值分别是 ( 3,3 )
(第一个表达式有小括号,为什么值不是4?) 展开
展开全部
1.别自己把自己搞糊涂了。只记住一条:基类构造函数肯定要再派生类前面调用就行了。这个关系是基本准则,其他一切都是根据这个来的。
2.如果A派生出B,B派生出C,那么A中的纯虚函数能不能在B中不实现,而只在C中实现?
这看你要怎么用了。如果你不准备实例化B,当然是可以的。如果你要实例化B,必须在B中实现。
这句话不严谨。如果派生类不准备实例化,当然不需要实现。就像你举的例子中的B一样。
3.(a++)+b 这个和a+++b 的值,说实话,这样的讨论真的没意义,完全看编译器怎么做。VS2008中,(a++)+b =3.编译器等这句话执行完了以后才将a赋值为2.如果这样写严重奇异,代码基本没法看。如果是想结果等于3,而a执行后等于2.应该这样写:a+b;a++;明确写2行。
a+++b,同理。这句话等于这么写:a+b;++b;
如果你想结果等于4(第一个),那么就明确这么写:a++;a+b.不要搞那种没有任何意义的简写。
2.如果A派生出B,B派生出C,那么A中的纯虚函数能不能在B中不实现,而只在C中实现?
这看你要怎么用了。如果你不准备实例化B,当然是可以的。如果你要实例化B,必须在B中实现。
这句话不严谨。如果派生类不准备实例化,当然不需要实现。就像你举的例子中的B一样。
3.(a++)+b 这个和a+++b 的值,说实话,这样的讨论真的没意义,完全看编译器怎么做。VS2008中,(a++)+b =3.编译器等这句话执行完了以后才将a赋值为2.如果这样写严重奇异,代码基本没法看。如果是想结果等于3,而a执行后等于2.应该这样写:a+b;a++;明确写2行。
a+++b,同理。这句话等于这么写:a+b;++b;
如果你想结果等于4(第一个),那么就明确这么写:a++;a+b.不要搞那种没有任何意义的简写。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询