|
|
2009爱立信面试题% @. ], g2 J7 z/ b4 F+ x
. K) r c1 K4 k! [ fZz
6 J! D; z0 `' c' R4 ^+ r/ K: p* F) X! J" f0 {5 l
(1)下面程序运行结果是什么:. G: ~) e2 ^7 m, C
#include "stdio.h": ?9 w V3 l8 B3 ]3 x& h7 y q8 Y
class test* v# I( V# x" ?$ l1 N1 _$ P
{7 f/ o4 l" D, W! \) ?
public:
{+ i, L- r& q& @- S$ gtest(){}
+ y- @* p3 h9 S, Svoid hello(){ printf("hello\n");}$ \" ~$ [+ |: z; o6 T. N
};
, V0 i- T% i, q; a% W- bvoid main()8 {6 b8 a/ l. S/ J p5 L
{4 p# r+ [8 f+ j# Y
test* p=new test();
$ p2 J) X4 @, ~9 z! |7 A0 U: P5 @ p=NULL;- {$ l9 o& e: x. \/ q
p->hello();
! i m0 T* m7 h. {7 c; q: Z}" h* t" Q, u% S" x
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错: a6 B. N3 |" h+ H( l% F2 _2 W" j
#include "stdio.h"
3 j% J/ x* \. ]7 F. m' s) w! Zclass test8 k0 c) [* W$ l, ~* M0 N
{
6 @. {. x" t+ ^( \+ L4 Sprivate:
4 N9 t W0 K" M2 N# Lint i;
, R) N7 l8 W( Kpublic:
6 F; Y4 |( ]# M4 ?test(){i=1;}
1 v& l4 R. p4 j' mvoid hello(){printf("%d\n",i);} }. }) X5 z0 U% G* a% c4 i
};
# i1 k! L8 v% H* P! @) Bvoid main()" F* ]' n9 J( i4 W2 j' u
{$ s. Y$ p) n! S7 J
test* p=new test();
) u! @. e: {: [# jp=NULL;% A8 n1 a' V& h* u
p->hello();
6 v1 r5 h+ h# x+ Z}
, n! X9 i/ r- m5 n c u如果将p=NULL注释掉就无误,就会输出1.2 l/ K% n; x2 B: v
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
/ J2 k" S. q2 ^+ o(1)C++的构造以及析构顺序, w' ?0 S* @0 G% d |* N0 b
#include <iostream>; m$ b- C; r7 h/ {
using namespace std;
$ L0 J) z. P, [" e( ~9 Lclass A
5 |0 H- Y( N3 ?$ |{3 ^; q% `7 j. m8 q/ W% i9 C
public:, H8 Q! W1 ]* G; F/ ]/ v* S T- B
A(){cout<<"A"<<endl;}# r: v! @, J& `+ ], w+ H
~A(){cout<<"~A"<<endl;}
4 o6 z4 i3 R5 y};5 P" P* U2 K* b
class B : public A5 D. ^) P9 |, R6 U! G4 V* V
{# a. ]8 ?. N$ f4 g8 n2 R4 d
public:
4 B6 R1 Q3 J) Z. j) |: CB(){cout<<"B"<<endl;}& |0 Q) j$ t. I, F
virtual ~B(){cout<<"~B"<<endl;}/ @7 C0 s) E" D& L; O" x
};
0 A- ~ _7 m( r4 [, R6 I" U9 K5 ?$ Tclass C : public B7 o. u" a+ ?& m% O7 b' y. W$ G
{0 m7 O* Y5 Y( Z) M" ]4 F3 S
public:7 I; ~1 b5 q! j, M$ @1 h
C(){cout<<"C"<<endl;}
9 b0 V7 c. L4 v~C(){cout<<"~C"<<endl;}
, D& I3 n. M3 {' M% k, S' d$ ?};
6 d+ L8 x' L5 E1 O7 Q8 p1 k0 ~9 w9 q1 e
void main()) g5 U' o' c& |$ P/ I- `
{
5 x7 U$ H* o" o. O: V! K" ]0 z/ ^' v4 o6 h% o3 R+ C
A *a=new A();2 b- j3 f: I$ | t+ u
B *b=new B();
" c& [( ]! j9 R' U0 D C *c=new C();! ^) Q; [0 a9 S2 z6 Y
A *d=new B();; T4 O( `+ J2 D' F
A *e=new C();
+ g- E$ [& q( P& X t6 V+ s7 C* `6 z$ OB *f=new C();
* u! G$ [+ x0 N# F
' ?+ d, b4 t: O3 ^" |delete a; cout<<"---------------\n";, W- T% Y& u; t
delete b; cout<<"---------------\n";
8 M. _3 U8 C! t _* qdelete c; cout<<"---------------\n";
1 u7 E7 q! R u2 M- q# F6 z6 fdelete d; cout<<"---------------\n";7 c, r$ F+ n" ?0 J; U {* K6 w! C3 U
delete e; cout<<"---------------\n";
' e) }3 {( q. [. u4 ~1 j$ |delete f; cout<<"---------------\n";: W% B/ b" d0 W8 x2 z
}
' W9 i j F+ F Q( Z这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。( u5 y* q ~4 ?: j8 A' C4 s, Q) e. E
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
+ r* ~/ v; d$ `3 H其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)+ g# X% g* R* R* y0 }, Z& S! z
(2)面试的诡异题目
9 I& @8 `- l* G# T% C大意就是如果你 test *p=new test[20];& H2 L) L; {7 G
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)/ L4 z b D) v5 Z7 i9 \* T
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
+ t" e/ n' Y5 {" X3 E
+ p5 ^# M' T* A: dZz0 g F$ H8 ]0 s* C: a$ F
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html6 B/ B* \+ x) N8 i( f+ r% z
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
2 f" |# n8 X7 K- u1 D* }爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
/ P4 G1 @. g" M& M# ?; b——3 |1 Q1 c( _$ _, \" f
百度2011年实习招聘专题
. s8 f% p x: F {' a5 h% V, ^http://www.aftjob.com/portal.php?mod=topic&topicid=22
* r+ K+ ]+ p) t: A' Y+ C爱立信2011年实习招聘专题/ I: w+ \; @- L" |
http://www.aftjob.com/portal.php?mod=topic&topicid=23% P8 T# K, t: h# M
新浪微博2011年实习生招聘1 R( C! m" C; H+ n* q; B( s
http://www.aftjob.com/portal.php?mod=topic&topicid=21- h2 D( q* {. e7 }1 Y/ D# [
阿凡提招聘:http://job.aftjob.com/job0 J1 J3 ^, \( u" Q' U$ m- R; q
阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag4 ~! J9 f( Q! k4 O( X* u
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum# f. C2 a" [9 h5 J
阿凡提职位搜索:
! N4 O% h: y& y% }3 I# I' E—— |
|