• c++对象成员的引用---12


    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/

    在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法:

    • 通过对象名和成员运算符访问对象中的成员;
    • 通过指向对象的指针访问对象中的成员;
    • 通过对象的引用变量访问对象中的成员。

    通过对象名和成员运算符访问对象中的成员

    例如在程序中可以写出以下语句:

       stud1.num=1001;  //假设num已定义为公用的整型数据成员

    表示将整数1001赋给对象stud1中的数据成员num。其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。注意不能只写成员名而忽略对象名。

    访问对象中成员的一般形式为:
        对象名.成员名
    不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如:

     stud1.display( );  //正确,调用对象stud1的公用成员函数
     display( );        //错误,没有指明是哪一个对象的display函数

    由于没有指明对象名,编译时把display作为普通函数处理。应该注意所访问的成员是公用的(public )还是私有的(private ),只能访问public成员,而不能访问private成员。如果已定义num为私有数据成员,下面的语句是错误的:

    stud1.num=10101;  //num是私有数据成员,不能被外界引用

    在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。

    通过指向对象的指针访问对象中的成员

    前面已经介绍了指向结构体变量的指针(详情请猛击:指向结构体变量的指针),可以通过指针引用结构体中的成员。用指针访问对象中的成员的方法与此类似。如果有以下程序段:

        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三者等价。

    还有以下代码参考

    #include <iostream>
    #include <string>
    using namespace std;
    
    class _test_class
    {
    public:
        int age;
        string name;
        void display()
        {
            cout <<"age is "<<age<<endl;
            cout <<"name is "<<name<<endl;
        }
    };
    
    
    int main(int argc,const char* argv)
    {
    
        _test_class class1,*pointer;
        pointer = &class1;
        pointer->age = 22;
        pointer->name = "zhouxuewei";
    
        pointer->display();
        return 0;
    }

    通过对象的引用变量来访问对象中的成员

    如果为一个对象定义了一个引用变量,它们是共占同一段存储单元的,实际上它们是同一个对象,只是用不同的名字表示而已。因此完全可以通过引用变量来访问对象中的成员。

    如果已声明了Time类,并有以下定义语句:

     Time t1;        //定义对象t1
     Time &t2=t1;    //定义Time类引用变量t2,并使之初始化为t1
     cout<<t2.hour;  //输出对象t1中的成员hour

    由于t2与t1共占同一段存储单元(即t2是t1的别名),因此t2.hour就是t1.hour。

    如下参考代码:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class _test_class
    {
    public:
        int age;
        string name;
        void display()
        {
            cout <<"age is "<<age<<endl;
            cout <<"name is "<<name<<endl;
        }
    };
    
    
    int main(int argc,const char* argv)
    {
    
        _test_class class1;
    
        _test_class &display_f = class1; //创建对象的引用
    
       display_f.age = 22; //通过对象的引用访问对象中的成员    
       display_f.name = "zhouxuewei"; //通过对象的引用访问对象中的成员
       display_f.display(); //通过对象的引用访问对象中的成员

       return 0;
    }

     类和对象的简单使用

    #include <iostream>
    #include <string>
    using namespace std;
    
    class _test_class
    {
    public:
        int age;
        string name;
    };
    
    void display2(_test_class &test)
    {
        cout <<"age is "<<test.age<<endl;
        cout <<"name is "<<test.name<<endl;
    }
    
    int main(int argc,const char* argv)
    {
    
        _test_class class1,class2,*pointer1,*pointer2;
    
        pointer1 = &class1;
        pointer1->age = 22;
        pointer1->name = "zhouxuewei";
    
        pointer2 = &class2;
        pointer2->age = 23;
        pointer2->name = "wangmingxue";
    
    
        display2(class1);
        display2(class2);
        return 0;
    }
  • 相关阅读:
    合并两个排序的链表
    把数组排成最小的数
    maven下使用jstl标签(1.2)版本
    SpringMVC5中,@ModelAttribute注解详解
    JavaWeb项目中斜杠(/)表示web工程、webapps的场景
    JavaWeb中jsp路径斜杆(/)跟没斜杆的路径映射问题
    关于Java多线程-interrupt()、interrupted()、isInterrupted()解释
    常见的HTTP状态码
    Java中的String,StringBuilder,StringBuffer三者的区别
    解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题
  • 原文地址:https://www.cnblogs.com/zxouxuewei/p/5731055.html
Copyright © 2020-2023  润新知