关于指针的引用的讲解

原创 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;
}

附图解释

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

相关文章推荐

指针和引用

  • 2012年03月08日 18:53
  • 26KB
  • 下载

使用冒泡排序讲解函数指针

冒泡排序,思路直观,函数指针是初学者常常想不明白的,这里利用冒泡排序,来深度讲解函数指针的由来。...

auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等...
  • jxw167
  • jxw167
  • 2017年06月05日 11:23
  • 489

史上最浅显的c指针讲解

1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→  6      7   8 ...

c++指针和引用

  • 2013年05月12日 18:56
  • 19.64MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于指针的引用的讲解
举报原因:
原因补充:

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