关于指针的引用的讲解

原创 2015年11月20日 11:47:57

前一段时间,一直纠结指针的引用,因为在关于二叉树的的一些操作中需要用到指针的引用。具体就不讲了,现在主要写传入指针的引用与传入指针的区别。

假设我想实现一个管理员的功能,管理学生信息,无法访问到学生的指针(比如说有了学生的指针,管理员就可以看到很多学生的隐私),只能访问到学生内部的指针(比如教师的指针,为了简单,这里假设学生只有一个指针)。

#include <iostream>
#include <string>
using namespace std;
class Teacher{
    string name;
    int id;
    string phone;
public:
    Teacher(string name, int id, string phone){
        this->name = name;
        this->id = id;
        this->phone = phone;
    }
    string getName( ){
        return name;
    }
    int getId( ){
        return id;
    }
    string getPhone( ){
        return this->phone;
    }
    void setName(string name){
        this->name = name;
    }
    void setId(int id)
    {
        this->id = id;
    }
    void setPhone(string phone){
        this->phone = phone;
    }
    void display( ){
        cout << "Teacher:" << this->name << "-id:" << this->id << "-phone:" << this->phone << endl;
    }


};
class Student{
    string name;
    int id;
    Teacher * teacher;
public:
    //给某个学生的teacher初始化一个教师,传入的参数tea应该默认为NULL
    /*
    注意,这里一定要用指针的引用,
    这里传入的参数是对学生的teacher指针域的引用,
    如果不传入指针的引用,修改的是内存中另一个指针的值,
    而不是学生对应teacher的值
    */
    static void AddStuTea(Teacher*&tea,string name,int id,string phone){
        tea = new Teacher(name, id, phone);
    }
    /*   //下面这个只能修改形参,student中的tea还是NULL,调用下面的函数会导致错误结果
    static void AddStuTea(Teacher*tea, string name, int id, string phone){
        tea = new Teacher(name, id, phone);
    }
    */
    //这里是设置一个学生的教师的信息,传入的是学生教师的指针,不需要指针的引用
    //因为这里修改的不是指针的值,而是指针指向的那块内存的值
    //因为形参和实参指向的都是同一块内存
    static void SetTeaInfo(Teacher* tea, string name, int id, string phone){
        tea->setName(name);
        tea->setId(id);
        tea->setPhone(phone);
    }


    Student(string name, int id, Teacher* teacher){
        this->name = name;
        this->id = id;
        this->teacher = teacher;
    }
    Student( ){
        this->name = "";
        this->id = -1;
        this->teacher = NULL;
    }
    string getName( ){
        return name;
    }
    int getId( ){
        return id;
    }
    Teacher*& getTeacher( ){
        return this->teacher;
    }
    void setName(string name){
        this->name = name;
    }
    void setId(int id)
    {
        this->id = id;
    }
    void setTeacher(Teacher* teacher){
        this->teacher = teacher;
    }
    void display( ){
        cout << this->name << ":" << this->id << endl;
        this->teacher->display( );
    }
};

int main( ){
    Student* s = new Student("wang", 201392252, NULL);

Teacher* t = s->getTeacher( );

    Student::SetTeaInfo(t,"www",666666,"18888888888");
    s->display( );

//一定要是传入引用,不能指针
    Student::AddStuTea(s->getTeacher( ),"sss",123456,"123456789");
    s->display( );
    return 0;
}

附图解释

版权声明:本文为博主原创文章,未经博主允许不得转载。

理解指向指针的引用

在做项目时,用到第三方的API:RequestService( string *reqst, string *&Rsp)       怎么来调用这个API呢?由于对指针的使用不熟悉,分别作了如下尝试:...
  • acs713
  • acs713
  • 2013年10月09日 16:11
  • 13578

使用引用还是使用指针

最近碰到一个面试题:何时使用指针,何时使用引用? 首先,标准 C 中是没有引用形参的,只能使用指针形参,应用是c++才加入的,c++中,引用可以看做变量的别名。 那么引用和指针有什么区别呢?主要有...
  • ljthdu
  • ljthdu
  • 2014年07月29日 16:52
  • 1219

C++中引用,指针,指针的引用,指针的指针

目录(?)[+] 定义一个指针的三种写法都对:1. int * p;  2. int* p;  3. int *p; 习惯不同而已 定义一个函数指针的三种写法都对:...
  • hr10707020217
  • hr10707020217
  • 2013年06月25日 15:22
  • 2741

指针和引用的区别

在c++的学习中,我们经常被应该如何使用指针和引用这个问题所困扰,那么我这里给大家说一下在我的学习过程中对指针和引用的理解,和它们之间的区别,希望各位朋友给出不同的意见并且指出我在学习中的一些错误 ...
  • study__linux
  • study__linux
  • 2016年05月09日 13:05
  • 857

C++语言笔记系列之五——引用(&)和this指针详解

1.this指针 (1)this指针是一个类所隐含的指针,一个类(注意不是对象)只有一个this指针,this指针是该类的所有对象所共享的。 (2)当通过一个对象访问该对象的成员时,默认this指针指...
  • laoniu_c
  • laoniu_c
  • 2014年02月24日 10:05
  • 1532

指针和引用的区别与相同点

原文地址:http://blog.csdn.net/will130/article/details/48730725 一、指针和引用的定义和性质区别: (1) 指针:指针是一个变量,只不过...
  • metheir
  • metheir
  • 2017年03月01日 12:10
  • 1261

指针变量和引用变量的区别

关于reference的一些看法
  • forlove_you
  • forlove_you
  • 2016年03月26日 14:01
  • 493

引用与指针在底层实现研究

这个题目最初是学弟问我的
  • u011822516
  • u011822516
  • 2014年09月21日 01:19
  • 822

关于C中指针的引用,解引用与脱去解引用

*,& 在指针操作中的意义    (1)*     大家都知道在写int *p 时,*可以声明一个指针。很少人知道*在C/C++中还有一个名字就是“解引用”。他的意思就是解释引用,...
  • qq_22642239
  • qq_22642239
  • 2016年10月19日 11:42
  • 2497

Java中的对象类型的引用到底是不是指针

初学Java,感觉引用和c中的指针很像,特此学习,mark一下 原文详见:http://blog.csdn.net/linyt/article/details/1573864 先放结论:可以认...
  • cewei711
  • cewei711
  • 2016年10月21日 11:04
  • 1669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于指针的引用的讲解
举报原因:
原因补充:

(最多只允许输入30个字)