|
|
2009爱立信面试题
2 B9 ?7 a7 z( F# \1 K6 o9 F
8 k: Q6 u- ^0 R, D8 A" o+ B M- HZz
4 Q6 S6 ?% X! i& t" u2 T5 q. |/ @$ `
(1)下面程序运行结果是什么:2 o4 _4 \' Y6 {5 d: P: }
#include "stdio.h"
$ E( o; t- Y& z- aclass test) i/ n' P) v' e2 T# a' e$ Z8 O
{
* [) |$ l1 _! t" o' u, c' L) Tpublic:
4 q5 q7 D7 i" ]2 c% gtest(){}0 Y( ]4 ]! c9 U1 \1 W: |0 g
void hello(){ printf("hello\n");}; b) j x1 z! u; e3 j- P4 A
};1 d5 q7 B D* k$ p" M' l
void main()
! c, [: I1 k* q1 t{
7 n+ \4 E3 a: r& W( _/ W test* p=new test();1 a+ D( F8 B4 B8 Z& A
p=NULL;
# ?* T) m6 @, c$ T# R/ _% A5 o p->hello();1 e5 E ^ C% m% n. |, ]
}. b1 f6 d! u: a6 `6 t
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:' T% f0 u/ u+ H+ `0 R4 p
#include "stdio.h"$ U) w) s6 Y2 y5 I s
class test
3 u6 o6 G Y# I3 ]6 |9 B: z{
" M1 h' |% L7 g# f T) Pprivate: B6 R! g- J; B/ X5 {9 U7 J
int i;
7 [- r$ e" s7 A$ }3 Z! q6 R1 L. ypublic:
- t4 `! S% G& Ztest(){i=1;}
1 l& \& U- N$ @* Ovoid hello(){printf("%d\n",i);}, B0 @ |2 A* x- a
};2 S, N5 c. [4 `4 j" p8 U* P
void main()) X* C1 s3 Q. g8 l
{/ V, Y) n& v4 j3 ?7 q
test* p=new test();+ \2 j, ]# _0 x+ `* L$ q) ^
p=NULL;
V3 O" M6 B6 @. Xp->hello(); d) u7 Q7 p- Z0 L! [( e5 N8 J
}
# [ g) Y( O7 ^- b5 V& I7 p1 ]如果将p=NULL注释掉就无误,就会输出1.( X) g) o H* B$ P
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
+ `( j. z/ s0 ~8 q" O. }(1)C++的构造以及析构顺序* ?2 z. b6 d( | y/ |& D" U
#include <iostream>
- k3 |; S/ _5 w2 D" A- Jusing namespace std;
. c) X$ [. I$ B0 `class A: P7 [' Z( u% X+ U
{
$ T& @/ I4 q. Z, W- Npublic: x6 z1 h( s8 k
A(){cout<<"A"<<endl;}
+ m" Q* A9 Y6 J% v! z* j~A(){cout<<"~A"<<endl;}
3 ^6 r1 |3 G& B3 s5 q* i};
: Q# q) j- q$ Pclass B : public A
: X5 b( P" l6 s: I5 T4 |{( R" M1 V# r0 e; [& l g; J
public:
% i: L0 K* Y% uB(){cout<<"B"<<endl;}* }% I9 I; K2 X* F
virtual ~B(){cout<<"~B"<<endl;}
" Y/ Q3 O5 f+ M6 W% K+ B};$ E J& m8 v$ h$ q5 q
class C : public B1 m: O, O; P' H( [ w
{' C0 k4 d6 o$ j: J2 u0 U3 S8 A
public:
- ~7 \2 m: E9 l. M! ^( d: v: uC(){cout<<"C"<<endl;}: Y7 Y& ]4 m+ P! u6 z- o
~C(){cout<<"~C"<<endl;}
9 ^5 P" u5 c7 l3 w: r; p X};
) H2 R/ h' L6 C! L9 K$ m& E( i* ^- o' E5 e( q
void main()/ E7 M- `- N) M- |
{ E; j) Z3 I* U6 b9 m C
+ R# E& W S2 f: C" R
A *a=new A();
( Z0 h3 f# l2 `6 a0 s7 ZB *b=new B();
/ w: W( d, @# \2 B& e7 m! Y1 k4 ^ C *c=new C();2 z1 M' S( R4 s2 } t0 a9 O
A *d=new B();
$ v7 G0 k6 y' k. LA *e=new C();
# m$ B5 B9 v/ |B *f=new C();
/ n% y: }/ j7 j4 @( ^+ _
' ~. P5 B8 G( {delete a; cout<<"---------------\n";
2 o' U7 \9 q. H6 ^delete b; cout<<"---------------\n";
6 t/ W6 Q W& W3 y- a4 Kdelete c; cout<<"---------------\n";
/ @, n5 w% u0 bdelete d; cout<<"---------------\n";9 T N: |$ h- \$ m
delete e; cout<<"---------------\n";9 Y, s3 ?9 ]% y# r$ a P" z
delete f; cout<<"---------------\n"; E% H8 J! Y% l7 |% G, T
}! N. U# `* X6 J: h- C% l1 F; r
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。+ N- Z9 P- S- k' P' R
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
% j: o) e9 g& N3 E其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)' g. b2 ?3 x" H
(2)面试的诡异题目7 H/ V! A, P/ S& }
大意就是如果你 test *p=new test[20];, o; W" k( ~" s) t- Y3 Q0 y$ L4 a
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
; N2 V( b: q5 L2 j' i7 r. z. z6 n答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……! O0 s9 x0 K* U- o% P/ i* Q1 i
3 j' F! J8 i( c. i- K: ?
Zz& E/ @0 C& F6 T6 N( ^
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
2 \: R: h5 d1 D3 [# L4 k% z上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html% i5 e( U! a( ~+ Z+ D- J- ~
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html8 U3 t1 p5 N; l1 e! t; r4 c/ {
——
4 c- ?" A9 P: c百度2011年实习招聘专题
8 Y2 r2 x" G+ n+ d. Nhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
0 o# y) x! W# R8 a( h爱立信2011年实习招聘专题6 @* V- W- C5 C1 Z1 o% p1 M
http://www.aftjob.com/portal.php?mod=topic&topicid=23
8 u; o4 `; k# R/ P1 u新浪微博2011年实习生招聘
& |; u0 g# o7 W: shttp://www.aftjob.com/portal.php?mod=topic&topicid=21
4 E8 v2 |8 j3 k4 N阿凡提招聘:http://job.aftjob.com/job
9 _9 X' E$ _, @5 B- n阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
, O! f6 G. D6 P* h; E阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum
' [* w& N& B3 C _; m1 z {7 w阿凡提职位搜索: G- g( J9 H5 `
—— |
|