指针不起作用

时间:2014-12-13 03:23:27

标签: c++

我是C ++的新手。我正在尝试运行以下代码,希望得到

  

姓名:马修
  接待员:约翰

然而,它给了我:

  

姓名:马修
  接待员:没人

我认为通过在r函数中将指针receptionist设置为set_receptionist(Employee* r),我将receptionist指针指向Employee对象,这也是r

的指针

所以,通过使用箭头操作符,我认为我可以访问接待员指向的Employee对象的成员函数。

如果我的理解错误,请纠正我。并教我如何修复此代码以获得我想要的结果。

#include <iostream>
#include <string>

using namespace std;

class Employee
{
public:
    string getName();
    void setName(string);
private:
    string name;
};

string Employee::getName()
{
    return name;
}

void Employee::setName(string x)
{
    name = x;
}

class Department
{
public:
    Department(string);
    void set_receptionist(Employee*);
    void print();
private:
    string name;
    Employee* receptionist;
};

Department::Department(string a)
{
    name = a;
    receptionist = NULL;
}

void Department::set_receptionist(Employee* r)
{
    receptionist = r;
}

void Department::print()
{
    cout << "Name: " << name << "\nReceptionist: ";
    if (receptionist == NULL)
        cout << "none";
    else
        cout << receptionist->getName();
    cout << "\n";
}

int main()
{
    Employee e;
    e.setName("John");

    Department d("Matthew");
    d.print();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您实际上从未调用Department::set_receptionist方法。因此,receptionistNULL构造函数中以Department开头,当您致电NULL时,它仍为Department::print

Employee john;
john.setName("John");
Department d("Matthew");
d.set_receptionist(&john);
d.print();

要回答您的评论,指针是一种可以将地址存储到另一个变量的类型。这正是指针的意思。指针是指向其他变量的变量。告诉指针指向何处的方法是为该指针指定一个地址。

所以当你说出以下内容时:

Employee john;
Employee *pointer = &john;

变量pointer现在通过存储其地址指向变量john。您可以“取消引用”指针以获取原始指向变量,在本例中为john。所以说pointer->setName("Bob");就像说john.setName("Bob");,除非你现在通过指针做这件事。重要的是要意识到*pointer不是john副本,但实际上引用了与john相同的内存位置。因此,您通过*pointer进行的任何修改都会直接应用于john,并会在john中显示。

此图表可以帮助您直观地理解指针和变量之间的关系:

enter image description here