2

リンクリストを使ってスタッククラスを実装したい。ヘッダー ファイルで定義する方法は次のとおりです。スタック内の各要素について、要素には 2 つのデータがあります。

#ifndef MYSTACK_H_INCLUDED
#define MYSTACK_H_INCLUDED
#include <iostream>
using namespace std;

template<typename T>
class MyStack{
public:
    MyStack();
    ~MyStack();
    ...
    ...
private:
    struct node;
    node* head;
    int _top;
};

template<typename T>
struct MyStack<T>::node {
    node(node*, T, T);
    T position_x;
    T position_y;
    node* next;
};

しかし、プライベート フィールドの構造体ノードを次のようなクラスに変更するとどうなるでしょうか。

#ifndef MYSTACK_H_INCLUDED
#define MYSTACK_H_INCLUDED
#include <cstddef> // for std:size_t
using namespace std;

template <class T>
class MyStack{
public:
    MyStack();
    ~MyStack();
    ...
    ...
private:
    class Node {
        friend class MyStack<T>;
    public:
        Node(T, Node*);
    private:
        const T value; 
        Node *next;   
    };
    Node *head;  


};
#endif // MYSTACK_H_INCLUDED

Node の Stack クラスに別の Class を作成する必要がありますか、それとも Struct を使用するだけですか? なぜ ?

4

1 に答える 1

0

内部データを公開したくないときはいつでも、あなたが現在行っていることを行います。リンクリストを定義します

template <class T>
class List{

    class Node{
    public:

         friend class List;              

    private:

         private members
    };

    public:
};

私がこのスタイルを好むのは、Java でプログラミングするためです。これは、私にとって非常に快適なこの形式で内部クラスと静的内部クラスを利用するからです。

List からアクセスするには、Node のプライベート フィールドをカプセル化する必要がありますが、それ以外に、クラスをそのように定義したり、構造体を使用したりすることもできますが、クラスと構造体の違いのみを思い出してください。それは、構造体メンバーがデフォルトでパブリックであることです。

于 2013-03-28T19:54:26.080 に答える