Как мне преобразовать "struct Node" в "class Node"? - PullRequest
1 голос
/ 05 апреля 2020

Например, у меня есть

struct Node
{
    string firstName;
    string middleI;
    string lastName;
    string phoneNum;
    Node *next;
};

Я хочу изменить его, поэтому вместо "struct Node" я изменю его на "class Node". Я чувствую, что то, что у меня есть, пока неверно, а именно:

class Node
{
private:
  string firstName;
  string middleI;
  string lastName;
  string phoneNum;

  Node *next;

public:
  Node(string f, string mi, string sur, string ph){
        firstName = f;
        middleI = mi;
        lastName = sur;
        phoneNum = ph;
        next = NULL;
  }
};

Если бы мне пришлось перейти от struct Node к классу Node, повлияет ли это на мои функции связанного списка? (Мои функции связанного списка распечатывают связанный список и читают данные.)

1 Ответ

1 голос
/ 05 апреля 2020

Я хочу изменить его, чтобы вместо "struct Node" я изменил его на "class Node"

Единственная разница между ключевыми словами struct и class спецификатор доступа по умолчанию для класса, который определяется. Поэтому, если вашей единственной целью является изменение ключевого слова, которое вы используете для определения класса, все, что вам нужно сделать, это указать спецификатор доступа, соответствующий исходному определению struct:

class Node
{
public:  // notice this
    string firstName;
    string middleI;
    string lastName;
    string phoneNum;
    Node *next;
};

Если бы мне пришлось перейти от структуры Node к классу Node, повлияет ли это на мои функции связанного списка?

Если определение остается эквивалентным, как в моем примере, то ничего не изменится, потому что оно является семантически эквивалентным.

Если вы измените доступ членов к частному, как в вашей попытке, то любая функция, не являющаяся членом, использующая эти имена членов, станет неформальной. Если ваша цель состоит в том, чтобы сделать ваши данные частными, вам нужно использовать функции-члены для доступа к ним.

...