找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1356|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
+ t! b2 ^3 Z8 t
' S, t: z2 b" V( x/ b; KZz6 J! _6 B2 b6 D

. C3 P1 X% Z1 }$ x5 h(1)下面程序运行结果是什么:( f0 w. l" J. C& _  Y3 H
#include "stdio.h"
# K& e4 f# A' N- bclass test! R$ U. ~1 y: E$ X% v6 i) }, ~/ j
{
3 A2 A' r2 b/ G* M, ^5 spublic:' [# i  q4 n. v9 M1 \
test(){}
6 v  G2 R8 E. t2 b$ jvoid hello(){ printf("hello\n");}
; F. _/ j5 g  p2 A( I( w};
6 e. {8 V% w% R2 X1 q% c% Hvoid main()% @- |) ]4 V! |5 h
{  p* W: C; r  H3 `; o% D
    test* p=new test();0 q7 ?* z4 d6 {& ]. ^& W3 w
    p=NULL;. m  c& y5 n3 {( k
    p->hello();6 X6 q7 `% R& Z: i/ @# i
}
! l" }! b6 O9 c( ~事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
& d8 W5 G6 F, {/ h#include "stdio.h"7 P9 q, C- \/ {8 l& X
class test
: R- Y1 t8 g6 m' m* s{+ U0 h; m7 A' l
private:7 m( r! W2 k& Z) U! V% j
int i;* ?' X$ O* m$ E
public:
9 O1 m; L5 a/ l  {5 I) S# ?" w6 ftest(){i=1;}: r: l1 _# ^( }& o, A2 b  O
void hello(){printf("%d\n",i);}
( O; y# k, h; |  J, f% D( X};
' S" z, S+ C' m. b1 j  p/ ~& n' Zvoid main(): M1 ~$ X8 t) K7 s$ L* e& A
{+ _9 N% v5 K6 I( M* U
    test* p=new test();: F7 G' a* ^% b  c$ V, o2 s5 O
p=NULL;5 M: T) N2 \4 Y4 Y$ m' f( N
p->hello();: w3 H$ I1 M% h9 g5 f
}
1 [8 {9 B3 r2 L- ^# q. M如果将p=NULL注释掉就无误,就会输出1.
! Y* [. H- |/ Q$ o4 G注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
0 y! ?& N# S$ M$ u8 |: A6 a- m( E(1)C++的构造以及析构顺序
4 P$ w' x( X2 @" u#include <iostream>3 }; v5 k6 j0 e* h& f
using namespace std;
. G6 X2 I: Q6 n; G) v7 Z; t' Nclass A. R4 o: T6 r) ~7 k& u
{9 `: K; S! G5 M; |( ?) F
public:
% {, Z# O; R1 bA(){cout<<"A"<<endl;}
/ T1 F; V; `( Q! y: y~A(){cout<<"~A"<<endl;}
- [4 [3 K# F3 K% ]. A$ x6 p};
" H% U- \" r% f0 h' E& z  mclass B : public A
" I- y! K- ?4 N- _' _{) D3 S$ L* ~: `9 t2 @3 G
public:: m+ b' m+ V  Z7 e+ I7 y
B(){cout<<"B"<<endl;}7 \6 P0 [) e5 r& @8 V8 G
virtual ~B(){cout<<"~B"<<endl;}0 O6 q: y! u) N4 Z
};+ D; A! _/ q- w1 _6 q
class C : public B
3 g, h+ j8 D+ b, c. o{& g; K+ K, ?* c0 q1 o  y
public:8 P3 @7 E; j6 `4 ^+ P! O' t
C(){cout<<"C"<<endl;}2 b* T, n8 K  K8 g! `
~C(){cout<<"~C"<<endl;}
1 U$ m. l! H& a$ Q5 h) P3 g2 l};" q3 [9 _* i* M5 _  H+ i

, @& Y* s% U, z2 ~) v, [void main()* I9 r* z$ e6 c8 q1 z8 ?
{
) C# B* P2 K; ~
7 g! w; u1 l+ z8 G8 G0 u7 PA *a=new A();+ T+ k: Y5 C1 Y6 [1 l* g# c1 [
B *b=new B();
8 [9 j  _) m" Y$ _. h  C *c=new C();
: t5 L% i" W5 l1 b" x0 vA *d=new B();
5 d& u  [/ h6 V/ S' V* I2 rA *e=new C();! p# F& ~5 b1 A3 z, v- S- ^
B *f=new C();! Y, N4 z* W$ E! ~$ z, k& r! D

8 T: b* w  s: A$ `6 K% O' mdelete a; cout<<"---------------\n";
& Q& E% B5 l& s9 y3 Udelete b;   cout<<"---------------\n";
: G5 y. u5 C- w; {; edelete c;   cout<<"---------------\n";3 n  a2 O; X( ]6 \) B. S& D4 c
delete d;   cout<<"---------------\n";* }, ]" e0 {# r0 M
delete e;   cout<<"---------------\n";
) d8 @% w- a2 Y2 ?2 I) Xdelete f;   cout<<"---------------\n";# R' t0 N7 p8 I1 g
}' K5 ]- ]' d5 t8 S5 @
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
+ @! f- c* l: w$ u, K  d4 f这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。, v7 b2 t$ ?0 [  L" x5 v. A
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)$ ?; W+ H) `6 ^9 j( r0 u
(2)面试的诡异题目6 ?$ M& s* y; A# s( _2 ~8 Q  v+ h
大意就是如果你 test *p=new test[20];
8 z- ^( b4 u8 R' F然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
9 x; U- c! m  ?6 W0 h答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
/ }; m- f7 s3 S6 y& Z- D* v' n4 i4 H* N8 z( A, J
Zz+ x7 J0 f- y# A+ u* m
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
/ d) k; F6 i; J. Q4 T7 P上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html% O9 c0 v1 h* ?. Y1 I+ }
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html+ T1 O# \: A9 r' t
——3 ^- M: d. R0 F8 J; ~& R
百度2011年实习招聘专题
4 w3 W$ F; U% t- a$ z, b& Yhttp://www.aftjob.com/portal.php?mod=topic&topicid=223 A0 o. x; J# k+ y1 W
爱立信2011年实习招聘专题
+ {, q! F4 n6 b7 O  q2 z( \4 z9 mhttp://www.aftjob.com/portal.php?mod=topic&topicid=232 e! A, Z+ J# M) d# w% {1 Q
新浪微博2011年实习生招聘
% p3 k! a3 x9 X2 A# d$ K! [7 |http://www.aftjob.com/portal.php?mod=topic&topicid=214 U5 ^% @. B" r& U% H7 S' Y% T
阿凡提招聘http://job.aftjob.com/job* s! M4 i/ Z' Z; m; }# C+ N
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag  I1 ]$ }5 W* V/ I  ]( E) `0 j
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
& j4 T8 {4 W9 c9 b5 N% @阿凡提职位搜索* \1 u2 P- [% L! s) V
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2026-8-18 11:45

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表