Как использовать тип собственной ссылки и использовать псевдоним внутри класса C ++ - PullRequest
0 голосов
/ 26 февраля 2019

Вот простой код, который я пытался использовать тип с собственной ссылкой и псевдоним одновременно.

#include <iostream>
class List {
private:
    struct node {
        int data;
        struct node* next;

        node(const int& d=0, struct node* n=nullptr) {
            data = d; next = n;
        }
        ~node() {};
    };
    using pNode = struct node*;
    pNode head;

public:
    List();
    ~List();
    void print() const { std::cout << head->data; }
};

List::List() {
    head = new node{55};
}

int main() {
  List *a = new List;
  a->print();
}

Это выше работает отлично.Тем не менее, я бы предпочел начать код, как показано ниже:

class List {
private:
    using pNode = struct node*;
    struct node {
        int data;
        pNode next;
    ...

Я хотел бы поместить using pNode = struct node* перед определением struct node, чтобы я мог использовать его также в определении struct node,Я считаю, что этот стиль кода работает хорошо, если я не использую класс.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Не скрывайте семантику указателя в псевдониме.Это единственный совет «никогда», который я всегда получаю.

И если вы согласны когда-либо использовать node* в своем коде, тогда вы можете просто написать

struct node {
    int data;
    node* next;
    // ..
};

C ++ вводиттип с именем node с struct node, в отличие от C. Таким образом, мы можем использовать естественный синтаксис.

0 голосов
/ 26 февраля 2019

Чтобы использовать последний, вам нужно объявить узел структуры следующим образом:

struct node;
using pNode = node*;
struct node {
    int data;
    pNode next;
};
...