类MyClass的定义如下:
class MyClass
public:
MyClass()
value=0;
setVariable(int i)
value=i;
private:
int value;
;
则以下各项对如下语句序列的描述中,正确的是( )。
MyClasS *p,my; p=&my;
A.语句“p=&my;”是把对象my赋值给指针变量p
B.语句“MyClass *p,my;”会调用两次类MyClass的构造函数
C.对语句“*p.SetVariable(5)”的调用是正确的
D.语句“p->SetVariable(5)”与语句“my.SetVariable(5)”等价
参考答案:D
解析: 对于选项A,由于表达式“p=&my;”只是把对象my的地址赋值给指针变量p,而不是对象my本身。所以选项A的描述是错误的。
对于选项B,语句“MyClass*p,my;”仅调用一次类MyClass的构造函数,因为指针 p本身不定义类对象,而是定义了p可以指向一个MyClass的对象,所以在定义指针对象时系统不会调用类的构造函数。所以选项B的描述也是错误的。
对于选项C,根据运算符的优先级,语句“*p.SetVariable;”等价于“*(p.SetVariable)”,显然这与原来的语句不同,正确的调用方式是(*p).SetVariable。所以选项C的描述也是错误。
对于选项D,由于p是对象指针,所以调用p的成员要用符号“->”。而my是一般的类对象,所以调用my的成员用“.”符。所以选项D是正确。