正文

高难度面试题求解(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 0 0 2) 指针是取函数或者变量的地址 而引用是给已经有的函数或者变量取别名  指针可以为NULL(空指针) 但引用必须引用一个现有的函数或者变量 不存在空引用 3)全局变量具有全局作用域 静态变量具有文件作用域 。。。 4) i=1 j=0 k=0 提前判断 5) 1.const char* p 字符指针 指向的内存的值不可修改  2.char const* p 同1  3.char* const p 常量字符指针 指针本身的值不可修改  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&

阅读(2299) | 评论(0)


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

评论

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