最近几天事情特别多,阅读的进展也不大。有很多有意思的计划也只能搁置中。为了免于荒疏,先贴一份先前公司笔试用的卷子吧。出的有点偏,不过总算还有点子丑寅卯。有兴趣的不妨做做,明天公布所谓的正确答案。
1.不使用其他任何变量,请写出交换变量a和b的函数
void swap(int &a,int &b)
{
//...
}
2.请写出以下结构或类的大小(sizeof的输出值),并给出简要的解释.
//A:
typedef struct
{
char c1;
char c2;
int n;
} stru;
//B:
class ClassA
{
public:
int m_data1;
int m_data2;
void func1() { }
void func2() { }
virtual void vfunc1() { }
virtual void vfunc2() { }
};
//C:
struct ClassB {
void f();
};
B::f(){}
3.写出下列程序的输出结果
class A
{
public:
void f(){cout<<"A f()"<<endl;}
virtual void ff(){cout<<"A ff()"<<endl;f();}
};
class B:public A
{
public:
virtual void f(){cout<<"B f()"<<endl;}
void ff(){cout<<"B ff()"<<endl;f();A::ff();}
};
class C:public B
{
public:
virtual void f(){cout<<"C f()"<<endl;}
};
void main()
{
B b;
A *ap=&b;
C c;
B &br=c;
B *bp=&c;
ap->f();
b.f();
br.f();
bp->f();
cout<<"----------\n";
ap->ff();
bp->ff();
}
4.改错题
下面函数实现了将一堆栈内数据的清空功能,请试着找出程序中存在的问题
class Stack
{
...
int pop(void); //出栈
void push(int); //压栈
int count(void); //返回栈内元素的个数
};
void clear(Stack& stack)
{
for(int i=0;i<stack.count();i++)
stack.pop();
}
5.请使用c++实现一线程安全的单例类,请尽可能提高单例的效率。只要表现出设计思路即可,不强求语法正确性。
6.有一单向链表list,一指针ptoken指向链表中某一结点(可能为头或中间结点,不为尾结点)
试问,在丢失头结点指针的情况下,如何从链表中删除该指针所指的结点。
可用伪代码简易给出实现思路。
7.以下函数输出结果为Hello world
如何在不修改main()函数体的条件下使程序输出结果为
Initialize
Hello world
Clean up
#include <iostream.h>
void main()
{
cout << "Hello world" << endl;
}
8.编程题:
已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);
1.不调用库函数,实现strcpy函数。
2.解释为什么要返回char *。