视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
4399网页游戏面试C++测试题
2025-09-29 22:26:22 责编:小OO
文档
4399.com C++测试题

一.选择题: 

1.以下代码执行的结果是什么?  a

void main() 

{

     int i; 

    char a[]="String";

    char *p="New Sring";

    char *Temp;

    Temp=a;

    a=malloc(strlen(p) + 1);

    strcpy(a,p);

    p = malloc(strlen(Temp) + 1);

    strcpy(p,Temp);

    printf("(%s, %s)",a,p);

    free(p);

    free(a);

}

a) 交换p 和& a的内容,同时打印出 New string, string

b) 在第8行生成编译期错误

c) 在第5行生成编译期错误 

d) 在第7行生成编译期错误 e) 在第1行生成编译期错误 

2. 下面程序的执行结果是?  b

char *gxxx()

{

    static char xxx[1024];

    return xxx;

void main()

{

    char *g="string";

    strcpy(gxxx(),g);

    g = gxxx();

    strcpy(g,"oldstring");

    printf("The string is : %s",gxxx());

}

a) The string is : string 

b) The string is :Oldstring

c) 产生执行期错误

d) 产生编译期语法错误

e) 以上都不对

3. 以下程序的执行结果是?  c 

void myalloc(char *x, int n)

{

    x= (char *)malloc(n*sizeof(char));

    memset(x,\\0,n*sizeof(char));

}

main()

{

    char *g="String";

    myalloc(g,20);

    strcpy(g,"Oldstring");

    printf("The string is %s",g);

a) The string is : String

b) 执行期错误

c) The string is : Oldstring

d) 编译期语法错误

e) 以上都不对

 

4.以下代码的执行结果是?  c 

void main()

{

    char p[]="String";

    int x=0;

    if(p=="String")

    {

        printf("Pass 1");

        if(p[sizeof(p)-2]=='g')

            printf("Pass 2");

        else

            printf("Fail 2");

    }

    else

    {

        printf("Fail 1");

        if(p[sizeof(p)-2]=='g')

            printf("Pass 2");

        else

            printf("Fail 2");

    }

a) Pass 1, Pass 2

b) Fail 1, Fail 2

c) Pass 1, Fail 2

d) Fail 1, Pass 2

e) 编译器语法错 

 

5. 对于下面的代码,哪个说法是对的?   b 

const char *p; 以及 char * const p; 

a) 两个字符串内容都不可修改 

b) 第一个: 不可修改字符串内容,第二个,不可假改指针内容

c) 两个指针都不可修改  

d) 第一个: 不可修改指针,第二个,不可修改字符串内容

e) 以上说法都不对

6. 以下代码的输出是? c

void main()

{

    char c=-;

    int i=-32;

    unsigned int u =-16;

    if(c>i)

    {

        printf("pass1,");

     if(c            printf("pass2");

        else

            printf("Fail2");

    }

    else

    {

        printf("Fail1);

     if(i            printf("pass2");

        else

            printf("Fail2")

    } 

a) Pass1,Pass2

b) Pass1,Fail2

c) Fail1,Pass2

d) Fail1,Fail2

e) 以上都不对

 

7. 以下代码的输出是  e 

void main()

{

    int i=0;

    for(i=0;i<20;i++)

    {

        switch(i)

        {

        case 0:

            i+=5;

        case 1:

            i+=2;

        case 5:

            i+=5;

        default: 

            i+=4;

        break;

        }

        printf("%d,",i);

    }

}

a) 0,5,9,13,17

b) 5,9,13,17

c) 12,17,22

d) 16,21

e) 语法错误 

 

8. 下面哪个说法是对的? d 

class A

    virtual void func1();

    void func2();

Class B: public class A

    void func1()

    {

        cout << "fun1 in class B" << endl;

    }

    virtual void func2()

    {

        cout << "fun2 in class B" << endl;

    }

}

a) A中的func1和B中的func2都是虚函数. 

b) A中的func1和B中的func2都不是虚函数. 

c) A中的func2是虚函数.,B中的func1不是虚函数. 

d) A中的func2不是虚函数,B中的func1是虚函数. 

9. cout是I/O流库预定义的什么?.  b 

a)类

b)对象

c)包含文件

d)常量 

10. 在32位系统下,已知int a,*pa=&a;,输出指针pa十进制的地址值的方法是? d 

a)cout<b)cout<<*pa;

c)cout<<&pa;

d)cout<11. 32位系统下,有一个类A定义如下:

Class A

{

    Int M1;  

    Float M2;  

    Virtual void F1( void ); 

    Void  F2( void );

    Static void F3( void ); 

}; 

定义一个A的实例a,请问a在常规的编译实现下,所占的内存空间有多大b

a)8

b)12

c)16

d)20

e)24

f) 以上答案都不对

12. 32位系统下,有一个类A定义如下: 

定义一个A的实例a,请问a在常规的编译实现下,所占的内存空间有多大

Class A

{

    Int M1;  

    Float M2;  

    Static Float M3;  

    Static const Int M4;  

    Enum M5

    {

        E1 = 1; 

        E2 = 2;

    } 

}; 

定义一个A的实例a,请问a在常规的编译实现下,所占的内存空间有多大 d

a)8   

b) 12  

c)16  

d)20  

e)24  

f) 以上答案都不对  

13. 已知类型定义如下:

class A

    int x;  

    virtual ~A(){}

};

class B: public A

{

    int y;

}

以下表达式的输出为:  c 

A* pa = New A; //假定pa赋值后的地址为0x111111;

B* pb = dynamic_cast< B*>( pa );

请问以上代码执行后,pb的值是:

a)0  

b)与pa相同,即为0x111111  

c)抛出异常

d)在pa地址上,进行类型换算偏移后的地址 

e)以上结果都不对  

14. 已知类型定义如下:

class A

    int x;  

    virtual ~A(){}

}; 

class B: public A

{

    int y;

}

以下表达式的输出为: 

A* pa = New A; //假定pa赋值后的地址为0x111111;

B& b = dynamic_cast< B&>(* pa ); 

请问以上代码执行后, b的地址是:  c

a)0  

b)与pa相同,即为0x111111  

c)抛出异常  

d)在pa地址上,进行类型换算偏移后的地址 

e)以上结果都不对

15. 关于this指针的说法错误的是  d 

a) this指针不需要显示说明

b) 虚函数拥有this指针

c) 成员函数拥有this指针

d) 静态成员函数拥有this指针

16. 下面对构造函数的不正确描述是 a 

a) 系统可以提供默认的构造函数

b) 构造函数可以有参数,所以可以有返回值

c) 构造函数可以重载

d) 构造函数可以设置默认参数

17.下列对模板的声明,正确的是  c 

a) template 

b) template  

c) template 

d) template  

 

18. 什么函数只能访问静态成员变量。 b   

a) 静态函数

b) 虚函数

c) 构造函数

d) 析构函数

19 假定类定义如下:

Class A

{

    ~A(void){}

}

Class B

{

    ~B( void){}

}

Class C :public B

    ~C( void ){}

    A a;

现有C的实例c,则当C被销毁时,调用的析构函数的顺序为   e 

a)  ~C(), ~A(), ~B();  

b)  ~A(),~C(),~B()  

c)  ~B(),~A(),~C() 

d)  ~C(),~B(),~A()  

e)  ~A,~B(),~C()  

f)  ~B(),~C(),~A()   

20假定类定义如下: 

Class A 

{

    A(void){}

Class B 

{

    B( void){} 

Class C :public B 

    C( void ){} 

    A a; 

现有C的实例c,则当C被创建时,调用的建构函数的顺序为   a 

a)   C(),A(),B();  

b)   A(),C(),B()  

c)   B(),A(),C() 

d)   C(),B(),A()  

e)   A, B(),C()  

f)   B(),C(),A()

二.问答题 

1.以下程序的输出是

#include 

#define MAX(a,b)  a > b ? a : b

void main ()

{

    int m = 10, n = 3, k = 1;     

    k = MAX(m, n + k) * 10;     

cout << "k = "<< k <

100 

2.以下程序的输出是: 

#include

using namespace std;

class a{ };

class b

{

public:

    virtual void test(){ }

}; 

void main(void)

{

    cout << sizeof(a);

    cout << sizeof(b);

1  4 

3. 什么函数不能声明为虚函数? 

 静态成员函数不能是虚函数  构造函数不能是虚函数 

 

4. 简述c++0x标准比较重要的新特性有哪些

新特性之一:Lambda表达式.

很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了简明的函数式的句法。同样是Visual Studio中的开发语言,Visual Basic和Visual C#早就实现了对Lambda表达式的支持,终于Visual C++这次也不甘落后,在Visual Studio 2010中添加了对Lambda表达式的支持。

新特性之二:静态断言static_assert

在新的C++标准C++0x中,加入了对静态断言的支持,引入了新的关键字static_assert来表示静态断言。使用静态断言,我们可以在程序的编译时期检测一些条件是否成立,这个特性在调试模板函数的模板参数时特别有用。在编译的时候,模板函数实例化,这时我们就可以使用静态断言去测试模板函数的参数是否按照我们的设计拥有合适的值。

此外,静态断言还带来很多其他的优势。例如静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更好的效率。另外比较重要的一个特性是如果断言失败,它会产生有意义且充分的诊断信息,帮助程序员快速解决问题。

新特性之三:auto关键字

在C++0x中,auto关键字的意义发生了改变。从Visual C++ 2010开始,auto关键字将用于指引编译器根据变量的初始值来决定变量的数据类型。换句话说,我们可以把auto当成一种新的数据类型,它可以“从初始化器(initialize)中推导出所代表的变量的真正类型”。这种对auto关键字的使用方式可以大大消除当前替代方式所导致的冗长和易出错的代码。

新特性之四:右值引用

作为最重要的一项语言特性,右值引用(rvalue references)被引入到 C++0x中。我们可以通过操作符“&&”来声明一个右值引用,原先在C++中使用“&”操作符声明的引用现在被称为左值引用。 左值引用和右值引用的表现行为基本一致,它们唯一的差别就是右值引用可以绑定到一个临时对象(右值)上,而左值引用不可以。

5. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。   

Bool a;

if( a==false )

Int a;

if( a==0 )

Float a;

if( a==0 ) 

6. 简述单件,对象工厂,观察者模式的常见用途。

客户端--------------服务器

7. 一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,是否能实现多态? 能 

只要基类在定义成员函数时已经声明了virtue关键字,在派生类实现的时候覆盖该函数时,virtue关键字可加可不加,不影响多态的实现。

 

8. const 符号常量; (1)const char *p (2)char const *p (3)char * const p 说明上面三种描述的区别

1 p指针指向的值必须是字符型 

2 p指针指向的值不能变 

3 p指针地址不能变 

9. 写出运行结果: 

{// test2     

union V 

    struct X 

    { 

        unsigned char s1:2;    

        unsigned char s2:3;    

        unsigned char s3:3; 

    }x;  

    unsigned char c;     

}v;  

v.c = 100; 

    printf("%d", v.x.s3);   

10. 简述Critical Section和Mutex的不同点

Mutex 是内核对象 

Critical Section本身不是内核对象下载本文

显示全文
专题