首页 > 试题广场 >

关于对象成员的访问,下面哪一种说法是错误的?

[不定项选择题]
关于对象成员的访问,下面哪一种说法是错误的?
  • 对于一个对象,可用“.”运算符来访问其成员
  • 对于一个对象引用,可用“一>”运算符来访问其成员
  • 如果被访问成员是公有的,该访问表达式可以出现在main函数中
  • 如果被访问成员是私有的,该访问表达式只能出现在类中
本题选B和D考察C++中的类和对象的概念。
A选项,C++中可以通过对象名和成员运算符访问对象中的成员,例如在程序中可以写出以下语句:
stud1.num=1001;//假设num已定义为公用的整型数据成员
表示将整数1001赋给对象stud1中的数据成员num。其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。
B选项,通过对象的引用变量来访问对象中的成员,如果为一个对象定义了一个引用变量,它们是共占同一段存储单元的,实际上它们是同一个对象,只是用不同的名字表示而已。因此完全可以通过引用变量来访问对象中的成员。
如果已声明了Time类,并有以下定义语句:
   Time t1; //定义对象t1
   Time &t2=t1;//定义Time类引用变量t2,并使之初始化为t1
   cout<<t2.hour;//输出对象t1中的成员hour
由于t2与t1共占同一段存储单元(即t2是t1的别名),因此t2.hour就是t1.hour。对于对象引用类型,不能用“一>”运算符来访问其成员,因此B选项错误。
这里要注意区分指向对象的指针访问对象中的成员:
如果有以下程序段:
class Time{
   public : //数据成员是公用的
   int hour;
   int minute;
};
Time t,*p;//定义对象t和指针变量p
p=&t;//使p指向对象t
cout<<p->hour;//输出p指向的对象中的成员hour
在p指向t的前提下,p->hour,(*p).hour和t.hour三者等价。
C选项,类的成员为公有的,即可以被该类的所有成员所访问;
class Cat{
    public:
        int weight;   
};
 int main(){
    Cat cat;//声明一个对象
    cat.weight=5;
    cout<<"The cat's weight is "<<cat.weight<<endl;
    return 0;
}
由于Cat类中的成员函数weight被声明成了公有成员,那么我们就可以在main函数中首先创建一个Cat类的对象(cat),并利用.运算符就可以直接调用weight这个数据成员了。因此C选项正确。
D选项,如果类A把类B声明为自己的友元类,那么在类B中的所有函数中都可以访问类A的私用和保护成员。例:
class A{    

     friend class B;
     private:    
         int aa;
};

class B{
public:    
    void output(){        
        cout << a.aa << endl;
    }
private:    
    A a;
}
因此D选项的表述是错误的。
综上B和D中说法错误,因此本题选B,D。
编辑于 2020-02-12 14:13:54 回复(0)
对象引用也是用“. ”来访问, 对象指针才是用“->”
发表于 2020-07-11 19:58:44 回复(0)
D选项友元函数可也访问
发表于 2020-03-13 11:39:04 回复(0)