问题 单项选择题

类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是正确。

单项选择题
单项选择题