正文

高难度面试题求解(C++)(初级)2010-06-08 21:12:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/manbuyuduan/51326.html

分享到:

C++面试题(初级)
姓名______ 日期_______

1:写出输出

void fun(int i) {
static int value=i++;
cout<<value;
}

int main() {
fun(0);
fun(1);
fun(2);
}


2:引用和指针之间有什么区别?

3:比较全局变量和静态变量,试说明两者有何异同.

4:分析代码,给出i,j,k的结果.

int i,j,k;
i=j=k=0;
if(++i||j++||++k) {}

5:说出如下const声明的含义:
1.const char* p
2.char const* p
3.char* const p
4.char A::fun() const;

6:编译下面的代码,会有什么结果?

1:
void fun(char);
void fun(char*);
int main()
{
fun(0);
}

2:
void fun(int);
void fun(int*);
int main()
{
fun(0);
}

7:请写出程序运行的结果

class A{
public:
A() { cout<<"A::A()"<<endl;}
~A() { cout<<"A::~A()"<<endl;}
};

class B{
public:
B() {cout<<"B::B()"<<endl;}
~B() {cout<<B::~B()"<<endl;}
};

class C:public B{
A a;
public:
C() {cout<<"C::C()"<<endl;}
~C() {cout<<"C::~C()"<<endl;}
};

A a;
int main()
{
C c;
}


8:请写出程序运行的结果

class A{
public:
A() {cout<<"A::A()"<<endl;}
~A() {cout<<"A::~A()"<<endl;}
};

class B{
public:
B(){cout<<"B::B()"<<endl;}
~B(){cout<<"B::~B()"<<endl;}
};

class C:public B{
public:
C():a(A()),b(B()){}
~C(){}

private:
B b;
A a;
};

int main()
{
C c;
}

9:请写出程序运行的结果

#include<iostream>
using namespace std;

class base{
public:
virtual void print() const {cout<<"base::f()"<<endl;}
};


class derived:public base {
public:
virtual void print() const {cout<<"derived::f()"<<endl;}
};

void print(const base& obj)
{
obj.print();
}


int main()
{
base* pb1=new derived();
print(*pb1);

base* pb2=new base(*pb1);
print(*pb2);

base b=base(derived());
print(b);

delete pb1;
delete pb2;

return 0;
}


10:什么是抽象类?

11:什么时候需要使用虚拟析构函数?

12:抽象基类的抽象虚析构函数一定要有函数体吗? 为什么?

13:下面的代码是否有错误? 如果有错,请说明原因.

char* const s="hello";
s[0]='a';

14:分析如下代码是否存在问题

const char* hello() {return "hello world";}

int main()
{
const char* pc=hello();
cout<<pc;
}

15:分析下面代码,指出问题

class obj{};

1. obj& fun() {obj o;return o;}
2. obj* fun() {obj o;return &o;}
3. obj fun() {obj o;return o;}

16:什么是函数重载?

17:面向对象有哪三个要素?

18:什么是多态?C++如何实现多态?

19:构造函数没有返回值,那么如何得知对象是否构造成功?

20:编译一个C/C++程序通常有哪几个阶段?

21:请指出下面代码存在的问题

class CC{
int* m_pCount;

public:
void clear(){ if (m_pCount) delete m_pCount;}
CC(){m_pCount=new int;}
~CC() {clear();}
};

22:请指出如下代码的问题所在

void ex() {
throw exception("exception");
}

void fun() {
char* buf=new char[64];
ex();
delete[] buf;
}

23:写出程序输出

void ex()
{ throw exception("exception");}

void fun()
{
try{ex();}
catch(exception*) {cout<<"exception*"<<endl;}
catch(exception&) { cout<<"exception&"<<endl"}
catch(...) { cout<<"..."<<endl;}
}
答案(不一定正确):

1) 0
2) 指针是取函数或者变量的地址 而引用是给已经有的函数或者变量取别名
 指针可以为NULL(空指针) 但引用必须引用一个现有的函数或者变量 不存在空引用
3)全局变量具有全局作用域 静态变量具有文件作用域 。。。
4) i=1 j=0 k=0 提前判断
5) 1.const char* 字符指针 指向的内存的值不可修改
 2.char const* 同1
 3.char* const 常量字符指针 指针本身的值不可修改
 4.char A::fun() const; 返回char的函数 该函数不会修改类A的任何一个成员变量
6)编译失败 因为0可以表示空指针 fun(0)函数出现二义性无法确定到底调用
 fun(int)还是fun(int*)
7)A::A()
 B::B()
 A::A()
 C::C()
 C::~C()
 A::~A()
 B::~B()
 A::~A()
 全局变量在main之前完成构造
 类构造的时候首先构造基类 然后初始化类成员(按参数表的那种初始化,不是构造函数体内的那种) 然后运行构造函数
 析构的顺序和构造顺序相反
8.B::B()
 B::B()
 A::A()
 A::~A()
 B::~B()
 B::~B()
 原理同上 只需要注意构造类成员的时候是按照定义的顺序进行构造 而不是按照初始化列表中定义的顺序构造
9.derived::f()
 base::f()
 base::f()
10.含有至少一个纯虚函数的类
11.该类存在派生类的时候
12.不一定要有 可以在派生类实现
13.不行 hello位于只读区 虽然不是const char*而是char* const 从而可以通过编译 但是写入s[0]会出错 因为实际上hello是const char*的
14.现代编译器上应该无问题的 理由是"hello world"在现代编译器上几乎不再会分配在栈内存上了 而是分配在string pool上。
15.class obj{}; 
1. obj& fun() {obj o;return o;} //返回栈内存 error
2. obj* fun() {obj o;return &o;} //返回栈内存 error
3. obj fun() {obj o;return o;} //无问题
16.具有相同函数名称 但是具有不同的变量类型或者个数的现象
17.继承 封装 重载
18.多态找本书翻下定义把 我无法用口语很好的表达
 实现是靠虚函数
19. 1)通过捕获异常 2) 使用new(std::nothrow)
20. precompile (处理宏等等)
 compile (正式编译)
 link (链接)
21. clear函数可能造成“野指针” 即删除了m_pcount指向的数据之后 m_pcount的值仍然不为NULL 下次再次调用clear函数的时候可能会产生m_pcount的数据仍然没有被删除的假象 从而执行不正确的delete造成crash
 void clear
 {
 if (m_pCount)
 {
 delete m_pCount;
 m_pCount=NULL; //delete不会帮我们将m_pCount置为NULL
 }
 }
22. 内存泄漏 delete根本不会执行
23. exception&

阅读(2219) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册