2

IE。我想编写一个可以像这样使用的 ADT 类:

myADT <type> objectA;

就像有人会使用这样的向量:

vector <type> aVector;

我猜它可能与模板和重载 <> 运算符有关,但我如何让它将数据类型作为参数?

4

5 回答 5

4

假设您有一个使用硬编码 typedef 实现 ADT 的类T

class ADT
{
  public:
    typedef int T;

    ADT();
    T& operator[](size_t index);
    const T& operator[](size_t index) const;
    size_t size() const;
    ...
  private:
    T* p_;
    size_t size_;
};

(您必须制定适合您实际 ADT 的内部存储和成员函数)。

要更改此设置,以便您可以指定T为已完成std::vector等:

template <typename T>    <-- specification of T moved to here
class ADT
{
  public:
                         <-- typedef for T removed from here
    ADT();
    T& operator[](size_t index);
    const T& operator[](size_t index) const;
    size_t size() const;
    ...
  private:
    T* p_;
    size_t size_;
};

那么用法是:

ADT<int> an_adt_int;
ADT<double> an_adt_double;
于 2011-03-01T01:31:02.150 回答
1

如果 ADT 是抽象数据类型,那么您应该使用模板

template<class T>
struct myADT
{
    // implementation, for example, two variables of type T.
    T A;
    T B;
};

使用

myADT<int> objectA;

objectA.A = 3;
objectB.B = 4;

myADT<char> C;

C.A = 'A';

我建议您阅读有关 C++ 模板的书籍或文章。谷歌“C++ 模板”。

于 2011-03-01T01:29:36.487 回答
1

我希望这是你正在寻找的

template <typename NodeType> class List;
template <typename NodeType>
class Node_List
{
    ...
    private:
      NodeType date;
      Node_List< NodeType > *next_Ptr;    
}

class List
{
   ...
   private:
     Node_List< NodeType > *first_Ptr;
     Node_List< NodeType > *last_Ptr;
 }

使用:

列表 <int> int_list; 列表 <char> char_list;

于 2011-03-01T01:32:45.333 回答
1

模板有助于适应类型的功能,而无需为每种类型实际重复代码,这是通用编程。

template < class T >
class foo
{
    T number ;
    public:
    foo( T a )
    {
        number = a; // This can be achieved through initializer lists too.
    }
};

在上面的代码片段中,关键字template表示以下是一个模板。并且类型是class,即,包含在 中<>。所以,foo是一个模板参数为的类模板T

foo<int> obj(10);

模板参数的类型为int。因此,相应的代码是由编译器在模板实例化时生成的。IE,

class foo
{
    int number ;
    public:
    foo( int a )
    {
        number = a; // This can be achieved through initializer lists too.
    }
};

如果提供了不同的模板参数int,则编译器将在模板实例化时生成相应的代码。有关详细信息,请参阅 MSDN 模板教程。希望能帮助到你。

于 2011-03-01T01:39:55.783 回答
1

@Matt Munson,托尼的问题有一个答案......来自cplusplus:

使用类型参数声明函数模板的格式是:

template <class identifier> function_declaration;
template <typename identifier> function_declaration;

两个原型之间的唯一区别是关键字 class 或关键字 typename 的使用。它的使用是模糊的,因为这两个表达式具有完全相同的含义并且行为方式完全相同。

于 2011-03-01T02:25:04.783 回答