XX公司笔试题目

时间:2021-02-24 14:38:49
1、which of following definition is not right?(多选)
1)int a[];
2)char strName[3]="Jack";
3)char strName[5]={'J','a','c','k','\0'};
4)char *strName="Jack";

2、what is the out put?
#define SQR(x) (x*x)
main(){
int a,b=4;
a=SQR(b+2);
printf("%d",a);}

3、How many errors are there in the A class?(指出哪些)
class A{
A();
~A();
public:
void Fa();
virtual void VFa();
private:
int m_a;};
int main()
{......
A* pa=new A();
....}

4、what is the difference between 'stdcall' and 'cdecl' in C++?(也可能没差异,为什么)
5、In debug version on VS(编译器),variable is defined,but not iitialized,contains
A.zeros;
B."garbage"value;
C.0XCCCC
D.blank spaces.

先这么多。踊跃答题。

32 个解决方案

#1


1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

5.A.B.视定义的作用域而定

#2


考得比较基础

#3


恩 不是很难的吧 应该

#4


6、what's the output?
class A{
pulic:
A(){Func();}
...
virtual Func(){
cout<<"in A"<<endl;
}
...
};
class B:public A{
public:
B(){Func();}
virtual Func(){
cout<<"in B"<<endl;
}
}
int main()
{
 B b;
}

#5


引用 1 楼 ljt3969636 的回复:
1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

5.A.B.视定义的作用域而定


第一题,我认为选项4是对的。

#6


引用 5 楼 pathuang68 的回复:
引用 1 楼 ljt3969636 的回复:

1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

……

4应该是对的,我测试了,这里必须先初始化,否则会出错。不能不初始化。

#7


4肯定对

我想1楼是考虑了一些后续情况吧

#8


char *strName="Jack";

例如通过strName修改"Jack"

#9


1)int a[];
2)char strName[3]="Jack";
3)char strName[5]={'J','a','c','k','\0'};
4)char *strName="Jack";
如果单选, 我选2, 明显溢出了, 不选1,是因为C/C++中有不完整数据类型的概念
例如:
struct tagList {
 DataType data;
 struct tagList *next;
};
很明显在 } 未出现之前, struct tagList还未定义完, 但是我们依然可以定义struct tagList *next; 这就是不完整数据类型
如果多选, 我选1、2

#10


#define SQR(x) (x*x) // x没有用括号括起来
main(){
int a,b=4;
a=SQR(b+2);
printf("%d",a);}
用VC++自带的宏展开选项展开后
int main(void)
{
int a,b=4;
a=(b+2*b+2);
printf("%d",a);
return 0;
}
第三题
默认构造函数被设为private了, 没有合适的公有构造函数, 而new的时候找不到合适的构造函数
第四题
stdcall 自动清栈 而cdecl不会
其余的可以参考
http://zhidao.baidu.com/question/70275738.html
第五题
B

#11


第一题错的地方是出题!

没说明什么是错误,比如2)虽然是越界了,但是编译器是不会报错的。

#12


第2题答案是c  烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫啊

#13


写错了。。。
第5题答案是c 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫啊

#14


1.(2)
2.14
3.error C2248: 'A::A' : cannot access private member declared in class 'A'
4.stdcall 自动清栈 而cdecl不会
5.C

#15


第一题: 1、2错
第二题: 14
第三题: 构造函数和析构函数应该定义为public类型;成员函数只有声明,没有实现

#16


第一题:1,2,3都是错的,2,3是数组溢出,1是不允许这样申请一个数组,必须有大小
第二题:14,宏定义中的变量没有加括号,所以展开的时候就变成 b+2*b+2=4+2*4+2=14
第三题:class类中没有加修饰符,默认是private的,构造函数和析构函数必须是public
第四题:stdcall主调函数压栈,被调函数弹栈,没有办法实现变参,会自动清空堆栈 
        cdecl主调函数压栈,主调函数弹栈,可以实现变参,不会自动清栈
第五题:C,一般调试的时候,经常看到变量区  烫烫烫
          就是0xCC 

#17


char *strName="Jack"  如果改成 string *strName="Jack"为什么会报错

#18


引用 5 楼 pathuang68 的回复:
引用 1 楼 ljt3969636 的回复:

1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

……


赞同

#19


试试去掉*
引用 17 楼 baozhu174 的回复:
char *strName="Jack"  如果改成 string *strName="Jack"为什么会报错

#20


只会第一题啊

#21


第五题 C

#22


1、1,2错
2、4+2*4+2=14
3、
a)应该将构造函数、析构函数声明为public,因为在主函数中需要使用,默认为private,这样主函数没有访问权限。
b)最好将析构函数声明为virtual
c)new的指针空间记得要释放delete pa;
4,5题不会哎。呵呵

#23


第6题:考查的是继承、虚函数,由于B继续自A,当b对象创建时自动先调用B的父类的构造函数,然后再调用自身构造函数。虚函数的存在使B类中的Func屏蔽了类A中的Func。

输出结果为:
in A
in B



附:可调试源码:
#include<iostream>
using namespace std;
class A{
    public:
        A(){Func();}
        virtual void Func(){
        cout<<"in A"<<endl;
    }
};

class B:public A{
    public:
        B(){Func();}
        virtual void Func(){
        cout<<"in B"<<endl;
    }
};
int main()
{
 B b;
}

#24


后面的题发上来看看。

#25


引用 1 楼 ljt3969636 的回复:
1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

5.A.B.视定义的作用域而定

赞同,补充下:
1题的4)题 那样做是没错的,后面想通过strname来修改就会出错了
第三题 用vs 2010 试过:

class A{
A();
~A();
public:
void Fa();
virtual void VFa();
private:
int m_a;};
int main()
{......
A* pa=new A();
....}

编译不能通过的两处:
构造申明为私有,new的时候出错;
virtual void VFa();必须定义,否则不能通过编译

#26


XX公司?是哪个XX

#27


学习了,对define理解又进一步

#28


该回复于2011-06-13 11:15:24被版主删除

#29


第一题,1)和2)错
第二题,14
第三题,(1)构造函数为么有,使用new操作符时编译错误;(2)析构函数为私有,同是没有相应的公有函数提供销毁功能;(3)两个函数Fa和VFa没有实现
第四题,压栈参数空间的回收区别,stdcall是被调用函数回收,cdecl是调用函数回收
第五题,C

#30


膜拜高手们!

#31


huifu

#32


引用 27 楼 sunjian_td 的回复:
学习了,对define理解又进一步


为什么第五题为C?

#1


1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

5.A.B.视定义的作用域而定

#2


考得比较基础

#3


恩 不是很难的吧 应该

#4


6、what's the output?
class A{
pulic:
A(){Func();}
...
virtual Func(){
cout<<"in A"<<endl;
}
...
};
class B:public A{
public:
B(){Func();}
virtual Func(){
cout<<"in B"<<endl;
}
}
int main()
{
 B b;
}

#5


引用 1 楼 ljt3969636 的回复:
1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

5.A.B.视定义的作用域而定


第一题,我认为选项4是对的。

#6


引用 5 楼 pathuang68 的回复:
引用 1 楼 ljt3969636 的回复:

1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

……

4应该是对的,我测试了,这里必须先初始化,否则会出错。不能不初始化。

#7


4肯定对

我想1楼是考虑了一些后续情况吧

#8


char *strName="Jack";

例如通过strName修改"Jack"

#9


1)int a[];
2)char strName[3]="Jack";
3)char strName[5]={'J','a','c','k','\0'};
4)char *strName="Jack";
如果单选, 我选2, 明显溢出了, 不选1,是因为C/C++中有不完整数据类型的概念
例如:
struct tagList {
 DataType data;
 struct tagList *next;
};
很明显在 } 未出现之前, struct tagList还未定义完, 但是我们依然可以定义struct tagList *next; 这就是不完整数据类型
如果多选, 我选1、2

#10


#define SQR(x) (x*x) // x没有用括号括起来
main(){
int a,b=4;
a=SQR(b+2);
printf("%d",a);}
用VC++自带的宏展开选项展开后
int main(void)
{
int a,b=4;
a=(b+2*b+2);
printf("%d",a);
return 0;
}
第三题
默认构造函数被设为private了, 没有合适的公有构造函数, 而new的时候找不到合适的构造函数
第四题
stdcall 自动清栈 而cdecl不会
其余的可以参考
http://zhidao.baidu.com/question/70275738.html
第五题
B

#11


第一题错的地方是出题!

没说明什么是错误,比如2)虽然是越界了,但是编译器是不会报错的。

#12


第2题答案是c  烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫啊

#13


写错了。。。
第5题答案是c 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫啊

#14


1.(2)
2.14
3.error C2248: 'A::A' : cannot access private member declared in class 'A'
4.stdcall 自动清栈 而cdecl不会
5.C

#15


第一题: 1、2错
第二题: 14
第三题: 构造函数和析构函数应该定义为public类型;成员函数只有声明,没有实现

#16


第一题:1,2,3都是错的,2,3是数组溢出,1是不允许这样申请一个数组,必须有大小
第二题:14,宏定义中的变量没有加括号,所以展开的时候就变成 b+2*b+2=4+2*4+2=14
第三题:class类中没有加修饰符,默认是private的,构造函数和析构函数必须是public
第四题:stdcall主调函数压栈,被调函数弹栈,没有办法实现变参,会自动清空堆栈 
        cdecl主调函数压栈,主调函数弹栈,可以实现变参,不会自动清栈
第五题:C,一般调试的时候,经常看到变量区  烫烫烫
          就是0xCC 

#17


char *strName="Jack"  如果改成 string *strName="Jack"为什么会报错

#18


引用 5 楼 pathuang68 的回复:
引用 1 楼 ljt3969636 的回复:

1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

……


赞同

#19


试试去掉*
引用 17 楼 baozhu174 的回复:
char *strName="Jack"  如果改成 string *strName="Jack"为什么会报错

#20


只会第一题啊

#21


第五题 C

#22


1、1,2错
2、4+2*4+2=14
3、
a)应该将构造函数、析构函数声明为public,因为在主函数中需要使用,默认为private,这样主函数没有访问权限。
b)最好将析构函数声明为virtual
c)new的指针空间记得要释放delete pa;
4,5题不会哎。呵呵

#23


第6题:考查的是继承、虚函数,由于B继续自A,当b对象创建时自动先调用B的父类的构造函数,然后再调用自身构造函数。虚函数的存在使B类中的Func屏蔽了类A中的Func。

输出结果为:
in A
in B



附:可调试源码:
#include<iostream>
using namespace std;
class A{
    public:
        A(){Func();}
        virtual void Func(){
        cout<<"in A"<<endl;
    }
};

class B:public A{
    public:
        B(){Func();}
        virtual void Func(){
        cout<<"in B"<<endl;
    }
};
int main()
{
 B b;
}

#24


后面的题发上来看看。

#25


引用 1 楼 ljt3969636 的回复:
1.3)对1)2)错。最后那个对错看怎么说,对的成分占很大比重!

2.b+2*b+2注意结合律,宏定义时少加括号的一个后果..

3.构造和析构函数一般不能私有(除非一些特定的设计模式下你确定要这么做),另外他可能还想让你说析构函数不是虚函数?


4.参数回收者不一样..至少printf这样的可变长参数函数一定要cdecl

5.A.B.视定义的作用域而定

赞同,补充下:
1题的4)题 那样做是没错的,后面想通过strname来修改就会出错了
第三题 用vs 2010 试过:

class A{
A();
~A();
public:
void Fa();
virtual void VFa();
private:
int m_a;};
int main()
{......
A* pa=new A();
....}

编译不能通过的两处:
构造申明为私有,new的时候出错;
virtual void VFa();必须定义,否则不能通过编译

#26


XX公司?是哪个XX

#27


学习了,对define理解又进一步

#28


该回复于2011-06-13 11:15:24被版主删除

#29


第一题,1)和2)错
第二题,14
第三题,(1)构造函数为么有,使用new操作符时编译错误;(2)析构函数为私有,同是没有相应的公有函数提供销毁功能;(3)两个函数Fa和VFa没有实现
第四题,压栈参数空间的回收区别,stdcall是被调用函数回收,cdecl是调用函数回收
第五题,C

#30


膜拜高手们!

#31


huifu

#32


引用 27 楼 sunjian_td 的回复:
学习了,对define理解又进一步


为什么第五题为C?