class Number {
public:
string type;
Number(): type(“void”) { }
explicit Number(short) :type(“short”) { } //这里显式构造,防止隐式转换.
Number(int) : type(“int”) { }
};
void Show(const Number& n) { cout << n.type; }
void f()
{
short s = 42;
Show(s); //这里首先需要对s的数据类型自动转换到int型,所以使用Number(int)这个构造函数
//结果答案为C.
}
a) void
b) short
c) int
d) None of the above
1.
What is displayed when f() is called given the code:
class Number {
public:
string type;
Number(): type(“void”) { }
explicit Number(short) : type(“short”) { }
Number(int) : type(“int”) { }
};
void Show(const Number& n) { cout << n.type; }
void f()
{
short s = 42;
Show(s);
}
a) void
b) short
c) int
d) None of the above
2. Which is the correct output for the following code
double dArray[2] = {4, 8}, *p, *q;
p = &dArray[0];
q = p + 1;
cout << q – p << endl;
cout << (int)q – (int)p << endl;
a) 1 and 8
b) 8 and 4
c) 4 and 8
d) 8 and 1
第一个选C;
虽然传入的是short类型,但是short类型的构造函数被生命被explicit,也就是只能显示类型转换,不能使用隐式类型转换。
第二个选A;
第一个是指针加减,按照的是指向地址类型的加减,只跟类型位置有关,q和p指向的数据类型以实际数据类型来算差一个位置,因此是1。而第二个加减是实际指针值得加减,在内存中一个double类型占据8个字节,因此是8
1. main()
2. {
3. union{ /*定义一个联合*/
4. int i;
5. struct{ /*在联合中定义一个结构*/
6. char first;
7. char second;
8. }half;
9. }number;
10. number.i=0x4241; /*联合成员赋值*/
11. printf("%c%c\n",number.half.first, mumber.half.second);
12. number.half.first='a'; /*联合中结构成员赋值*/
13. number.half.second='b';
14. printf("%x\n", number.i);
15. getch();
16. }
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n",number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
答案: AB (0x41对应'A',是低位;0x42对应'B',是高位)。
a=0x61, b=0x62,按照低位低地址,高位高地址的原则,得答案0x6261 (number.i和number.half共用一块地址空间)。
1,设计模式:
整全两模块;
只要用另一模块的一部分,屏蔽其它功能;
有多种类,有类似的信息,扩展、复用差;
两个类的变数之间建立联系;
2,EXE中可以释放DLL中的申请的内存吗?
3.delete 和Delete[]的区别;
4. Explicit
5. Com的三个基本接口。