1. 已知下面这些类型的声明
template <class elemType> class Array;
enum Status {...};
typedef string* Pstring;
下面哪一个对象的定义是错误的:
- Array< int* &> pri( 1024 );
- Array< Array<int> > aai( 1024 );
- Array< Status > as( 1024 );
- Array< Pstring > aps( 1024 );
解释:首先要确定Array这个模板类里有一个构造函数,这个构造函数还必须接受一个整形或浮点形或可以转换到整形的参数。然后可以确定a选项是不对的。分析各选项,
B中要求这个类还要有一个无参的构造函数!因为Array<int>这样的类型在Array< >中初始化的时候,是被视为一个类类型的,而不是像int double 这样的内置类型,这样在Array<>的构造函数中就必须生成一系列Array<int>这样的类型,如果没有无参的构造函数,那么是错误的;
C说明Array中存放的类型是Status;
D说明Array中存放的类型是string的指针;
A int型的指针的引用时不行的,但是如果改成int**是可以的
2. 下面哪些定义不合法:
a. int car = 1024, auto = 2048;
b. int ival = ival;
c. int ival(int());
d. double salary = wage = 999.99;
解释:两项有问题:D wage没声明;A auto是关键字
B是可以但是会有warning;C可以他会初始化ival为整形的默认值
3. 下面那些定义合法:
a. long* const cpl;
b. const long lc;
c. const long* const cplc;
d. const long* plc;
解释:选d,abc因为作为一个常量,必须在声明的时候初始化。而d是一个指针,它指向一个常长整形,可以不初始化,a是指向长整形的常量指针;b是常长整形;c是常长整形的常量指针。
4. 已知有如下定义:
long l = 10;
const long cl = 100;
那么下面表达式不正确的是:
a. const long* pl = &cl;
b. long* const pl = &cl;
c. const long* const pl = &cl;
d. const long* pl = &l;
B </