【问题标题】:What does Aclass<Bclass> my_obj(5) mean? [closed]Aclass<Bclass> my_obj(5) 是什么意思? [关闭]
【发布时间】:2017-09-18 23:11:02
【问题描述】:

Bclass 是否像变量一样成为 Aclass 的成员?而 Aclass 的 my_obj 以 5 为输入?

ArrayList 类开始于:

template <typename E>
class ArrayList: public ListInterface<E>{
public:
    ArrayList(int capacity){
        listArray_ = new E[capacity]; 
        n_=0; 
        capacity_ = capacity;
    }...

SortedArrayList 类开始于:

template <typename E>
class SortedArrayList: public ArrayList<E>{
public:
SortedArrayList(int capacity): ArrayList<E>(capacity) {
} ...

在 int main 中:

SortedArrayList<myFavoriteDataType> my_list(5);
my_list.add(myFavoriteDataType("P17", 17)); 
my_list.add(myFavoriteDataType("P5", 5)); 
my_list.add(myFavoriteDataType("P3", 3)); 
my_list.add(myFavoriteDataType("P100", 100)); 
my_list.add(myFavoriteDataType("P24", 24)); 
my_list.print();

所以现在我需要创建类 myFavoriteDataType 类。我的老师没有解释 SortedArrayList 是什么意思?

【问题讨论】:

  • Bclass 是您示例中的模板参数。
  • @juanchopanza 好吧,让我们先问一个有意识的问题。
  • @user0042 不,不。他有这个权利。我至少应该认真对待这件事。
  • @KerrekSB 如何声明 Bclass 以便 Aclass 工作?
  • 这很大程度上取决于AclassBclass 以及他们应该做什么。任何关于如何使某事工作的问题都应包括您拥有的代码示例以及您遇到的问题的描述。来自编译器的错误消息和警告总是一个加号。

标签: c++ class


【解决方案1】:

Aclass 是一个class template,专门围绕Bclass。这意味着将构造一个新类,替换模板参数为Bclass 的标记。可能有多个模板参数,在这种情况下 A) 代码正在尝试 Partial Template Specialization 并且 B) 它不会编译。

例子:

template <class TYPE>
class Aclass
{
    TYPE data;
public:
    Aclass(int num): data(num)
    {
    }
};

上面将创建一个类来存储尚未指定的类型TYPE,并尝试使用构造函数提供的数字对其进行初始化。

或者类似的东西

class AclassOfBclass
{
    Bclass data;
public:
    Aclass(int num): data(num)
    {
    }
};

但你永远不会看到这个。它只存在于编译器中。编译器创建它,使用它,然后基于它吐出机器代码。

Aclass 可以使用TYPE 的不同方式数量惊人。大多数情况下,是的,它用于设置成员变量的类型,但是如果您想看看这可以走多远,请查看模板元编程

现在我们有一个专门围绕BclassAclass,它被实例化为一个名为my_obj 的对象,该对象构造为数字5。从上面的示例开始,

class Bclass
{
    int value;
public:
    Bclass(int num): value(num)
    {
    }
};

int main()
{
    Aclass<Bclass> my_obj(5);
}

这导致 my_obj 最终包含数字 5。这不是一个有用的例子。所以很高兴你用一些代码缩小了问题的范围。

SortedArrayList<myFavoriteDataType> my_list(5);

创建一个SortedArrayList,我假设它对其内容进行了排序,命名为my_list,它存储了一个由5 个元素组成的myFavoriteDataType 列表。

【讨论】:

  • 谢谢,我想我现在更了解模板了。最后发现老师只是想让我们重载MyFavoriteDataType的二进制操作,这样就不会和SortedArrayList冲突了。几乎每个学生都花更多的时间来理解她的目标,而不是实际编写代码。那么,你提到了模板元编程,我可以在哪里学习这种编程?
  • There are several books here in the intermediate and advanced sections. 在深入研究之前,请确保您掌握了 C++ 基础知识。
猜你喜欢
  • 2019-04-03
  • 2010-12-29
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2013-05-16
  • 2011-04-03
相关资源
最近更新 更多