C++ 常见面试题(一)-----牛客网

1.

enum string{    

    x1,    

    x2,    

    x3=10,    

    x4,    

    x5,    

} x;

函数外部访问x等于什么?

解:0

枚举类型:在函数外部访问,默认初始化为0。在函数内部访问,必须要初始化,否则编译不通过。

2.在32位机器中,如下代码:

1

2

3

4

5

6

7

8

9

void example(char acWelcome[]){

    printf("%d",sizeof(acWelcome));

    return;

}

void main(){

    char acWelcome[]="Welcome to Huawei Test";

    example(acWelcome);

    return;

}

的输出是? 

解:4

数组名作函数参数,会退化为指针。

指针的实质是一个内存空间,内存空间的分配与机器的字长有关。

32位指针大小:4

64位指针大小:8

3.

void Func(char str_arg[100])

{

       printf("%d\n",sizeof(str_arg));

}

int main(void)

{

     char str[]="Hello";

     printf("%d\n",sizeof(str));

    printf("%d\n",strlen(str));

    char*p=str;

    printf("%d\n",sizeof(p));

    Func(str);

}

解:6

       5

       4

       4

printf("%d\n",sizeof(str));数组str所占的内存空间大小;字符串都是已'\0'结尾,也要算,所以是6。

printf("%d\n",strlen(str));数组str的长度;大小为5。

printf("%d\n",sizeof(p));指针大小;32为机器为4,64为机器为8。

Func(str);数组名作函数参数,退化为指针。故还是求指针大小

4.

下面程序运行后的结果为:

1

2

3

4

5

6

7

char str[] = "glad to test something";

char *p = str;

p++;

int *p1 = reinterpret_cast<int *>(p);

p1++;

p = reinterpret_cast<char *>(p1); 

printf("result is %s\n", p);

 

32位系统下下面程序的输出结果为多少? 

解:result is to test something

char str[] = "glad to test something";

char *p = str;//指针p指向str数组的首地址g

p++;//指向str的l

int *p1 = reinterpret_cast<int *>(p);//指针p被重新解释为整型指针并被赋值给p1

p1++;//p1是int型32位占4个字节,所以指向t

p = reinterpret_cast<char *>(p1);//p1重新转换为字符型赋值给p 

printf("result is %s\n", p);

5.

设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?

1

2

3

4

5

6

7

8

C c;

void main()

{

    A*pa=new A();

    B b;

    static D d;

    delete pa;

}

解: ABDC

c是全局变量和d局部静态变量,分配在静态全局区,程序结束时释放。全局变量和局部静态变量,先调用,后释放。

pa是堆上的对象指针,手动释放

b是栈上的对象,main结束时释放

 

6.若char是一字节,int是4字节,指针类型是4字节,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

class CTest

{

    public:

        CTest():m_chData(‘\0’),m_nData(0)

        {

        }

        virtual void mem_fun(){}

    private:

        char m_chData;

        int m_nData;

        static char s_chData;

};

char CTest::s_chData=’\0’;

问:

(1)若按4字节对齐sizeof(CTest)的值是多少?

(2)若按1字节对齐sizeof(CTest)的值是多少?

请选择正确的答案。

解:12   和  9

若按4字节对齐sizeof(CTest)的值是12; 

若按1字节对齐sizeof(CTest)的值是9 

解释:

在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。

如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间

虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。

sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于int、float这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小

7.在Java中,以下关于方法重载和方法重写描述正确的是?

A.方法重载和方法的重写实现的功能相同
B.方法重载出现在父子关系中,方法重写是在同一类中
C.方法重载的返回值类型必须一致,参数项必须不同
D.方法重写的返回值类型必须相同或相容。(或是其子类)

解:D

方法重载:在一个类里面,定义的同名函数(函数参数类型、参数个数、返回值不一样)

方法重写:在派生类中,重写基类的方法。只有函数体不一样,函数名,函数参数,参数个数都要一样。 

8. 

#include<iostream>

using namespace std;

class MyClass

{

public:

    MyClass(int i = 0)

    {

        cout << i;

    }

    MyClass(const MyClass &x)

    {

        cout << 2;

    }

    MyClass &operator=(const MyClass &x)

    {

        cout << 3;

        return *this;

    }

    ~MyClass()

    {

        cout << 4;

    }

};

int main()

{

    MyClass obj1(1), obj2(2);

    MyClass obj3 = obj1;

    return 0;

}

运行时的输出结果是(122444

MyClass obj1(1):调用构造函数,输出1

MyClass obj2(2):调用构造函数,输出2

MyClass obj3 = obj1;调用拷贝构造函数,输出2

调用3次,析构3次:444

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值