金山2009校园招聘成都一笔试题

本文解析了金山2009年校园招聘成都站的一道笔试题,涉及C++中构造函数调用顺序、虚函数、运算符重载等知识点,并给出了一段示例代码及运行结果。

金山2009校园招聘成都一笔试题 http://www.cppblog.com/expter/archive/2008/10/20/64518.html

 1 # include <iostream>
 2 using  namespace std;
 3
 4 class  base
 5 {
 6public:
 7    base()
 8    {
 9        cout <<" base::val "<<endl;
10        val = 12345;
11        print();
12    }

13    base(int x)
14    {
15        val = x;
16        cout << " "<<endl;
17    }

18    virtual void print()
19    {
20        cout << " base:print(), val = "<<val<<endl;
21    }

22    base & operator = (int x)
23    {
24        val = x;
25        cout <<" base::operator, val = "<<x<<endl;
26        return *this;
27    }

28    void relase()
29    {
30        cout << " base::relase" <<endl;
31    }

32    ~base()
33    {
34        cout << " ~base::val = "<< val <<endl;
35    }

36protected:
37    int  val;
38}
;
39
40 class deiver: public  base
41 {
42public:
43    deiver()
44    {
45        cout << " deiver::val "<<endl;
46    }

47    
48    deiver(int x)
49    {
50        val = x;
51        print();
52    }

53    void print()
54    {
55        cout << " deiver::print(), val =  "<< val <<endl;
56    }

57    void relase()
58    {
59        cout << " deiver::relase, val = "<<val<<endl;
60    }

61    deiver & operator = (int x)
62    {
63        val = x;
64        cout <<" deiver::operator, val = "<<x<<endl;
65        return *this;
66    }

67    ~deiver()
68    {
69        cout << " deiver::~deiver "<<endl;
70    }

71}
;
72 void des( base * b)
73 {
74    b->print();
75    b->relase();
76}

77 deiver  de = 98765;
78 int main()
79 {
80        deiver  * dee = new deiver;
81    *(base *)dee = 100;
82    des(dee);
83
84    return 0;
85}

86

输出结果。。。
因为de是全局变量,所以先调用基类构造函数,在调用子类的带int的构造方法。。
然后dee同理先基类构造函数,然后调用默认构造函数。

最后dee强制转换为基类指针进行复制,根据多态,调用基类的operator=方法
最后调用子类的print和父类的relase方法。

因为print是虚函数


运算结果为
 base::val
 base:print(), val = 12345
 deiver::print(), val =  98765
 base::val
 base:print(), val = 12345
 deiver::val
 base::operator, val = 100
 deiver::print(), val =  100
 base::relase

posted on 2008-10-20 20:30 expter 阅读(3348) 评论(10)  编辑 收藏引用 所属分类: 面试笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值