首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个面试题,求教!该如何处理

2013-04-02 
一个面试题,求教!class A{A() {printf(ConstructA} //1~A() {printf(DisConstructA}//2}class B:

一个面试题,求教!
class A
    {
        A() {    printf("Construct    A";    }; //1
        ~A() {     printf("DisConstruct    A";    };//2   
    }
class B: public A
    {
       B() {    printf("Construct    B";    };//3
        ~B() {     printf("DisConstruct    B";    };//4

    main()
    {
        B b;
    }
    如果程序的执行结果是1234,请问这是什么原因导致的?
[解决办法]
面试官忽悠你呢吧
正确的结果 肯定是 13 4 2
[解决办法]
一时还想不出  帮你顶上去   等大牛来解释(不够感觉这也没什么合理的解释了)
[解决办法]

引用:
C++中的public分为两种情况:1、public修饰的类成员,表示类成员被访问控制的权限。    
 public修饰:公有成员,基类、子类、友元、外部都可以访问       
 private修饰:私有成员,基类、友元可以访问,子类、外部不可以访问       
 protected修饰:保护成员,基类、子类、友元可以访问,外部不可以访问这样很好得体现了C++……


你讲的跟这题半毛钱关系都没有吧

个人以为:
    在继承到一半的时候崩了,就是基类继承出现了问题,此时A已经构造完成,那么一旦异常,会自动调用~A,1和2就出来了。
    B还是接着构造,接着析构。
[解决办法]
引用:
引用:引用:C++中的public分为两种情况:1、public修饰的类成员,表示类成员被访问控制的权限。    
 public修饰:公有成员,基类、子类、友元、外部都可以访问       
 private修饰:私有成员,基类、友元可以访问,子类、外部不可以访问       
……


个人比较倾向10楼的说法
但如果是这种复杂情况的话  可能游离于C++标准或之外的 属于未定义的行为
[解决办法]
首先,你的程序存在很多错误,比如缺少‘;’,')',最后修改后是1 3 4 2
#include <stdio.h>

class A
{
public:
A() {    printf("Construct A=1\n");  }; //1
~A() {     printf("DisConstruct A=2\n");    };//2   
};

class B: public A
{
public:
B() {    printf("Construct B=3\n");    };//3
~B() {     printf("DisConstruct B=4\n");    };//4
};

void main()
{
    B b;
}
结果是:
Construct A=1
Construct B=3
DisConstruct B=4
DisConstruct A=2
Press any key to continue

[解决办法]
你直接回复:不存在1234的情况,或者已经发生了C++标准定义之外的行为。
[解决办法]
能不能用汇编把内存地址错乱了,然后达到题目所说的要求,看似荒谬,但是除了这个方法实在想不出什么好的方法了。
------解决方案--------------------


什么公司?做什么的?

[解决办法]
是不是因为刚执行B b;这一句的时候,main线程就结束了,所以在构造的时候对象也刚好析构了。。。
[解决办法]
#10是不科学的.一个异常被抛出之后,如果遇不到合适的catch,会相继调用uncaught_exception和terminate等函数而结束,不会自动调用析构函数,更不会继续往下执行子类的构造过程.而基类对象的构造过程是无法单独try-catch的.使用
楼主想要在完全不改变任何代码的情况下追求一个合理的解释,我感觉这个愿望不太现实.我更情愿把这个面试题当成是一个代码填空游戏.
当然,如果有大神能给出合理的解释,那就只能膜拜+学习了.

热点排行