一份CPP的面试题,这是要招聘大师吗?

C++程序员试题

(以下程序代码假设都在32位机器上运行)

写出结果

1.  int i=3, j=5, k;

    k = (++i) + (i++) + (j++);

i=        j=       k=    

2. 计算sizeof 的值.

char str[] = “flower”

char *p = str ;

int n = 10;

sizeof (str ) =    (1)

sizeof ( p ) =    (2)

sizeof ( n ) =    (3)

void Foo ( char str[100])

{

sizeof( str ) =    (4)

}

void *p = malloc( 100 );

sizeof ( p ) =    (5)

3. char c2[10]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};

int *p1 = (int *)c2;

char *p2 = (char *)(p1+2);

   

   *p2 =    ;

4. 请看下面的代码是否有问题,如果有问题,请准确简要的说明。

class A

{

public:

A(){  init(); }

virtual ~A(){}

virtual void init();

virtual void method();

};

class B : public A

{

public:

B(): A(){}

~B(){ ~A(); }

void init(){}

void method();

};

5、下面的代码输出什么?

#include "stdio.h"

class Base

{

public:

Base(){ printf("Base Construct\n");}

~Base(){ printf("Base Destruct\n");}

void func1(void) { printf("Base func1\n"); }

virtual void func2(void) { printf("Base func2\n"); }

};

class Second :public Base

{

public:

Second(){printf("Second Construct\n");}

~Second(){printf("Second Destruct\n");}

void func1(void) { printf("Second func1\n"); }

virtual void func2(void) { printf("Second func2\n"); }

};

void main(int argc,char *argv)

{

Base ba;

Second se;

Base *pba = &se;

Second *pse = &se;

pba->func1();

pba->func2();

pse->func1();

pse->func2();

}

6. 下面代码是否有问题,如果有问题,该如何修改?

    #include <vector>

void main(int argc,char *argv)

{

     std::vector<int> Data;

     for(int i=0; i<10; ++i)

         Data.push_back(i);

     std::vector<int>::iterator it;

     for(it=Data.begin(); it!=Data.end(); ++it)

Data.erase(it);

}

7.下列哪些初始化是合法的为什么

(a) int i = -1;

(b) const int ic = i;

(c) const int *pic = ⁣

(d) int *const cpi = ⁣

(e) const int *const cpic = ⁣

8. 以下代码中的两个sizeof用法有问题吗?

void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母

{

    for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )

        if( 'a'<=str[i] && str[i]<='z' )

            str[i] -= ('a'-'A' );

}

char str[] = "aBcDe";

cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;

UpperCase( str );

cout << str << endl;

  1. void   GetMemory(char *p)   

  {   

     P = (char *)malloc(100);

   }   

  void   Test(void)   

  {   

      char *str = NULL;

      GetMemory(str);

      strcpy(str,"hello  world");   

      printf(str);

   }

 请问运行Test函数会有什么样的结果?为什么?

回答问题

1. 请说明strcpy、strncpy和memcpy的区别。

2. const int giNumber = 100; (1)

   #define  iNumber  100 (2)

(1)和(2)定义的常数,有什么不同之处,哪种更好一些?

3. 断言(ASSERT)和异常(EXCEPTION)的区别是什么,使用的场合有什么区别?

4.struct 和 class 有什么区别?

5. 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?

6. 如果一个类会被其它类继承,那么这个类是否一定需要虚析构函数,请简要的说明原因?

7. static 修饰函数、函数内变量;类的属性、类的函数,各起什么作用??

编写程序

1. 编写类String的构造函数、析构函数和赋值函数。

已知类String的原型为:

class String

{

  public:

        String(const char *str = NULL);         // 普通构造函数

        String(const String &other);            // 拷贝构造函数

        ~ String(void);                         // 析构函数

        String & operate=(const String &other); // 赋值函数

  private:

        char          *m_data;                  // 用于保存字符串

};

请编写String的上述4个函数。

2.写代码。有一个作图程序,需要在界面上画出几种图形,包括:方形、三角形、圆形。现在想把通过一次循环调用就把所有形状都画出来。你试着写出这些代码。(不用写具体的类实现代码,写出大致框架代码即可。)