习习

They do what they can do, and We do what we want to do!

今天你C++了嘛?

    最近几天事情特别多,阅读的进展也不大。有很多有意思的计划也只能搁置中。为了免于荒疏,先贴一份先前公司笔试用的卷子吧。出的有点偏,不过总算还有点子丑寅卯。有兴趣的不妨做做,明天公布所谓的正确答案。

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 *。

posted on 2005-08-03 00:09 微风 阅读(385) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。