首页 > 试题广场 >

以下描述正确的是?

[单选题]
以下描述正确的是?
  • 虚函数是可以内联的,可以减少函数调用的开销提高效率
  • 类里面可以同时存在函数名和参数都一样的虚函数和静态函数
  • 父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类对象指针会调用父类的析构函数
  • 以上都不对
对于A的话参看 http://blog.csdn.net/zy1691/article/details/3606128
《Effective C++》的第33款:
即使是最简单的虚函数调用,编译器的内联处理程序对它也爱莫能助。(这一点也不奇怪。virtual的意思是"等到运行时再决定调用哪个函数",inline的意思是"在编译期间将调用之处用被调函数来代替",如果编译器甚至还不知道哪个函数将被调用,当然就不能责怪它拒绝生成内联调用了)。

B  会冲突,实例调用的时候不知道调用哪个了。。

C  A* a = new B  //B是A的子类
    delete a 
    此时父类析构函数需要加virtual,如果不加virtual,那么最后只会调用A的析构函    数,而派生的部分,并没有得到析构,导致内存泄露。

    B* b = new B
    delete b
    此时父类析构函数并不需要加virtual,就是一个很正常的构造析构过程
    A() -> B() -> ~B() -> ~A()
    




编辑于 2015-09-20 12:29:35 回复(7)
delete子类对象是一定会调用父类的析构函数的先调用子类的析构函数然后调用父类的析构函数;如果要调用父类指向子类的对象,此时才需要父类的析构函数是虚的。
发表于 2015-04-05 11:26:25 回复(4)
A项解析:虚函数意味着程序运行期间确定了函数的调用地址,而内敛函数是把代码嵌入到声明出,前者是动态,后者是静态的。
虚函数不能是内联函数(编译时展开,必须有实体),不能是静态函数(属于自身类,不属于对象,而虚函数要求有实体),不能是构造函数(尚未建立虚函数表)。虚函数只在继承的概念下有意义。
发表于 2015-08-24 23:22:32 回复(1)
题目是说子类的析构函数是虚的,可是,明明是父类啊!
发表于 2017-10-31 08:13:58 回复(0)
c选项与多态无关
发表于 2015-06-05 12:38:10 回复(1)
理解错了C选项的意思,其实就是正常调用子类析构函数~~~
发表于 2017-08-06 16:45:41 回复(0)
选D,我试了一下,在释放父类的时候崩溃了
发表于 2015-04-01 23:11:13 回复(0)

虽然是虚函数继承,但还是强调两个概念,一个是实例化子类对象,另一个是通过基类指针或引用指向子类对象。若基类析构函数为非虚函数,子类析构函数为虚函数,前者照样会调用基类的析构函数,而后者只会调用子类的析构函数。
因此将基类的析构函数定义为虚函数即是为了防止后者基类指针指向子类对象的情况。

发表于 2017-04-25 21:31:03 回复(0)
C的问法感觉有问题,改成“当父类的析构函数......子类的析构函数 是虚的时”就好了。这句话应该是条件,我直接当成结论了
发表于 2017-02-11 10:28:15 回复(0)
虚函数只在继承的条件下有意义。
发表于 2016-05-22 14:22:12 回复(0)
题目有问题! 父类析构是非虚的,子类析构也是非虚的时候,delete子类对象指针也会调用父类的析构函数啊。这题还有什么意思。如果我错了 请留言我 谢谢
发表于 2015-07-17 10:12:12 回复(1)
选c,vc 和 g++下都会
发表于 2015-03-24 16:53:00 回复(0)
答案:选C
虚函数不能是内联函数,不能是静态函数因为虚函数需要有实体,也不能是构造函数(尚未建立虚函数表),B会冲突
发表于 2014-12-30 20:07:42 回复(0)