今天的C++笔试题,求解!!!!!
1.
class A
{
const int Size = 0;
};
这个类声明正确吗?为什么?
2.下面的程序在INTEL机子上运行
struct B
{
union
{
struct
{
unsigned int i:2;
unsigned int j:3;
unsigned int k:3;
}X;
unsigned char c;
};
};
B m;
m.c =200;
printf("%d\n",m.x.k);
输出结果是什么??
第2题 i 是对应的是二进制的高位还是低位,即200的二进 制是11001000,i对应的是11还是00??若是11,输出应该是11还是3??
问题点数:50、回复次数:29Top
1 楼foochow(无聊,灌水......)回复于 2005-05-21 17:38:15 得分 0
1.定义不对吧,类的数据应该通过构造函数来初始化,不能直接赋值Top
2 楼llf_hust()回复于 2005-05-21 17:43:53 得分 5
1.
class A
{
const int Size = 0;
};
这个类声明正确吗?为什么?
//错误,常量必须在构造函数的初始化列表里面初始化
Top
3 楼yyxc306()回复于 2005-05-21 17:47:12 得分 0
那第2题呢,那个题我不是很清楚,只是模糊的知道一些Top
4 楼qhfu(改个名字)回复于 2005-05-21 17:48:30 得分 5
(2)K是3位,输出为6。110Top
5 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-05-21 17:49:03 得分 0
楼上说的对,
const成员必须在构造函数的初始化列表中
初始化.
class A
{
public:
A():Size(0){};
}
Top
6 楼llf_hust()回复于 2005-05-21 17:52:11 得分 0
2
应该是输出6吧
110的二进制Top
7 楼du51(郁郁思扬)回复于 2005-05-21 17:53:05 得分 5
1.楼上.
2.一般是从低向高排.多数都是这样.也有从高向低排的.不多.
输出应该为为0Top
8 楼du51(郁郁思扬)回复于 2005-05-21 17:54:17 得分 0
哇人气好旺呀...
上面看错了.K应该为6Top
9 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-05-21 17:59:50 得分 5
第一个差一点就正确了……加上个static就好了……Top
10 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-05-21 18:17:09 得分 0
IA的位顺序是和IBM的某些处理器倒过来的……外在表现一般是字节顺序的颠倒……
C语言里面只有在位域里面才能超过字节顺序的范围体现这个问题……Top
11 楼yanyuxin(焰.驭心)回复于 2005-05-21 18:43:48 得分 10
第一题:
class A
{
public:
const int a;
A():Size(0){};
}
同意楼上的。
第二题:
输出6。
i对应低位 00
如果对应11则输出3
整个结构体实例定义上占用8位内存。
m.c 和i,j,k变量共用。
模式为:1 1 0 0 1 0 0 0
~~~~~~ ~~~~~~ ~~~~
k j i
~~~~~~~~~~~~~~~~~~~~~~~
c
所以 k==6;j==2;i==0;c==200(整个八位值);
Top
12 楼hell_wolf(浪花)回复于 2005-05-21 18:49:54 得分 0
1 不对,常量必须在构造函数的初始化列表里面初始化
2 200的二进 制是110 010 00
k j i
所以输出是6
Top
13 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-05-21 21:38:10 得分 0
这个……楼上这个ID也和某人太……
召唤某某、某某和某某……Top
14 楼flyingdancing2005(返璞归C)回复于 2005-05-21 22:16:02 得分 0
长见识了................Top
15 楼sunman1982(冥王星)回复于 2005-05-21 22:18:39 得分 0
intel的是小端机,也就是说在内存中低位在前高位在后 所以输出是6Top
16 楼zdy_8212(zdy_8212)回复于 2005-05-22 02:32:58 得分 0
class A
{
public:
const int Size;
A():Size(0){ };
};
6
Top
17 楼umbrella1984(雨伞(KEN))回复于 2005-05-22 16:46:34 得分 0
第一题的答案乱七八糟的,类的定义应该放在头文件里,类的初始化应该放在CPP文件里.Top
18 楼xxxl()回复于 2005-05-22 18:05:03 得分 0
1题无异议
2题 输入应该是0,因为是从高往低排的Top
19 楼donrong(执着者)回复于 2005-05-22 18:23:35 得分 0
我在vc++8.0里面试了一下,输出的是6Top
20 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2005-05-22 19:11:20 得分 0
1. 声明是错误的.
2. 6Top
21 楼tsocpp(小黑子)回复于 2005-05-22 19:36:36 得分 0
1。类在定义的时候不分配内存空间的吧,所以也就无法赋值啊,只能用构造函数
2。答案很明显,正如楼上们所说的,为6Top
22 楼huabihan(心灵waiting)回复于 2005-05-22 19:54:05 得分 0
k=6;
i=0;
测试完毕.Top
23 楼ben_na(笨笨)回复于 2005-05-22 20:01:16 得分 15
第一个问题: 错, 只有常数静态整形(char也算)数据才能够在类或结构中初始化。
正确的应该这样:
class A {
const static int i = 1;
};
当然你可以这样:
class A {
const static int i;
};
const int A::i = 1;
第二题:
union {
struct {
unsigned int i:2;
unsigned int j:3;
unsigned int k:3;
}X;
unsigned char c;
};
这题其实是考联合型,以及IntelCPU内存布局,当然,这里涉及到位域。
m.c =200;
200 化为二进制为: 11001000
他是倒着排的, 所以m.X.i 占两位是: 00 即为0
m.X.j 占三位是: 010 即为2
m.X.k 占三位是: 110 即为6
我不知道你在哪里碰到这样的笔试题,考一些语法的细节, 不大喜欢这样,
考C++完全可以考一些更常规的东西, 比如: 重载运算符 += = << ++ 的设计, 以及泛形语法, 以及多态等C++具有代表性的东西。 而且更容易在编程实践中碰到。
上面只是我一时的想法, 没别的意思,呵呵。
Top
24 楼MagicCarmack(MagiC++)回复于 2005-05-23 02:46:17 得分 0
UP楼上的Top
25 楼xjp6688(大平/要做必须最好)回复于 2005-05-23 07:39:35 得分 0
intel cpu是小尾顺序的,呵呵Top
26 楼whatsouta(某疯子)回复于 2005-05-23 12:25:09 得分 0
struct
{
unsigned int i:2;
unsigned int j:3;
unsigned int k:3;
}X;
能否高手讲解一下啊?谢谢Top
27 楼xiaolingtongsw()回复于 2005-05-23 15:18:58 得分 5
#include <stdio.h>
struct B
{
union
{
struct
{
unsigned int i:2;
unsigned int j:3;
unsigned int k:3;
}X;
unsigned char c;
};
};
void main()
{ B m;
m.c =200;
printf("%d\n",m.X.k);}
运行一下吧。!!X要大写。。。
上面的对。
Top
28 楼xiaolingtongsw()回复于 2005-05-23 15:29:09 得分 0
联合。union的各个成员占用共同的存储单元。在一个瞬间只有一个成员起作用咯。
输的话是。6。。那样的解释是正确的。
Top
29 楼musin1(并合)回复于 2005-05-23 15:48:26 得分 0
高人多阿!
学习!Top




