C++面试题(初级)
姓名______ 日期_______
1:写出输出
void fun(int i) {
static int value=i++;
cout<<value;
}
int main() {
fun(0);
fun(1);
fun(2);
}
2:引用和指针之间有什么区别?
1.从内存上来讲 系统为指针分寸内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间。
2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。
3.所以引用访问对象是直接访问。指针访问对象是间接访问。
4。如果pa是指针,那么*pa就是引用了。
但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。程序如下:
#include<stdio.h>
void pt(int * pta,int * ptb)
{
int *ptc;
ptc=pta;pta=ptb;ptb=ptc;
}
void ref(int &ra,int &rb)
{
int rc;
rc=ra;ra=rb;rb=rc;
}
void main()
{
int a=3;int b=4;
int *pa=&a;int *pb=&b;
pt(pa,pb);
printf(“zhizhen: a=%d,b=%dn”,a,b);
ref(a,b);
printf(“yinyong: a=%d,b=%dn”,a,b);
}
输出结果如下图:

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;}
}


