如何将指向对象的指针转换为常量解除引用的对象?

时间:2017-05-23 01:19:49

标签: c++ pointers linked-list const

我正在尝试为Student指针的链接列表编写toString函数,从Student类实现以前创建的toString函数。

我的问题是,当我遍历链表时,我无法创建每个Student对象,以便从Student类调用toString。

我认为这与构造新的Student对象时需要const& Student参数这一事实有关,但我不知道如何将每个temp-> s更改为constant& Stud。我可以使用const_cast,如下所示吗?

这是我到目前为止所做的:

std::string StudentRoll::toString() const {
  Node* temp = head;
  while(temp != NULL){ //my attempt
        Student newStudent(const_cast <Student*> (temp->s));
        *(newStudent).toString(); //toString function from Student class            
        temp = temp->next;
  }
}

这是我的Student.h:

#include <string>

class Student {

 public:
  Student(const char * const name, int perm);

  int getPerm() const;
  const char * const getName() const;

  void setPerm(const int perm);
  void setName(const char * const name);

  Student(const Student &orig);
  ~Student();
  Student & operator=(const Student &right);

  std::string toString() const;

 private:
  int perm;
  char *name; // allocated on heap
};

这是StudentRoll.h

#include <string>
#include "student.h"

class StudentRoll {

 public:
  StudentRoll();
  void insertAtTail(const Student &s);
  std::string toString() const;

  StudentRoll(const StudentRoll &orig);
  ~StudentRoll();
  StudentRoll & operator=(const StudentRoll &right);

 private:
  struct Node {
    Student *s;
    Node *next;
  };
  Node *head;
  Node *tail;
};

1 个答案:

答案 0 :(得分:1)

const_cast 删除常量,因此在这种情况下你不想使用它。

由于Node的{​​{1}}字段是s,您只需取消引用它(Student*运算符)即可提取*对象。传递给Student的构造函数时,Student是隐式的。

尝试以下操作,并了解您需要从const &返回一个值。

StudentRoll::toString()