Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;解释;“一班轮”;重载成员函数迭代器(inti=0)的构造函数:i(i){};_C++_Constructor_Ctor Initializer - Fatal编程技术网

C++ C++;解释;“一班轮”;重载成员函数迭代器(inti=0)的构造函数:i(i){};

C++ C++;解释;“一班轮”;重载成员函数迭代器(inti=0)的构造函数:i(i){};,c++,constructor,ctor-initializer,C++,Constructor,Ctor Initializer,我有一个关于这个承包商实际在做什么的问题。我在网上找到了它,它是为我的目的而工作的,但我想了解它的符号 class Iterator { int i; public: Iterator(int i = 0) : i(i) {}; friend class SinglyLinkedList<Element>; Node* _current; Iterator(SinglyLinkedList& list) { this->list = l

我有一个关于这个承包商实际在做什么的问题。我在网上找到了它,它是为我的目的而工作的,但我想了解它的符号

class Iterator { 
  int i;
public:
  Iterator(int i = 0) : i(i) {};

  friend class SinglyLinkedList<Element>;
  Node* _current;

  Iterator(SinglyLinkedList& list) {
    this->list = list;
    reset();
  }

  void reset() {
    _current = list._head;
  }

  void next(){
    if(!done()) {
      _current = _current->_next;
    }
  }

  bool done(){
    bool done = false;
    if(_current->_next == nullptr) {
      done = true;
    }
    return done;
  }
private:
  SinglyLinkedList list;
};
类迭代器{
int i;
公众:
迭代器(inti=0):i(i){};
朋友类单链接列表;
节点*\u电流;
迭代器(SingleLinkedList&list){
这个->列表=列表;
重置();
}
无效重置(){
_当前=列表。\u头;
}
作废下一页(){
如果(!done()){
_当前=_当前->_下一步;
}
}
bool done(){
bool done=false;
如果(_current->_next==nullptr){
完成=正确;
}
已完成的返回;
}
私人:
单链接列表;
};
这是一个成员函数,证明了它的有效性

unsigned long print(Element e, const Iterator& index) {
cout << index.i << "\n";
return 0;
无符号长打印(元素e、常量迭代器和索引){
cout构造器

Iterator(int i = 0) : i(i) {}
允许您以三种方式构造迭代器的实例:

  • 您可以在不传递参数的情况下使用此构造函数(在这种情况下,假定为零)
  • 您可以显式调用此构造函数,将单个
    int
    参数传递给它,或
  • 您可以隐式调用此构造函数,传递一个
    int
    ,而不是它
以下是第一种方法:

Iterator one;
这是第二种方式:

Iterator two(123);
这是第三条路:

Iterator three = 321;
当你写这篇文章时,回到你的代码

const Iterator& index = 2;
编译器创建一个临时对象,使用构造函数的隐式调用对其进行初始化,并将此临时对象的引用设置为
index
。这类似于构造函数的第三种调用(即隐式调用)但是目标是一个隐藏的临时对象。编译器可以在这里使用临时对象,因为
索引
声明为
const
;没有它就无法编译。

解释了不同的使用方法,但我想谈谈这里到底发生了什么

行是迭代器(inti=0):i(i){};
让我们分解所有部分

迭代器(inti=0)
做三件事:

  • 宣布这是
    迭代器
    类的构造函数
  • 宣布此构造函数接受单个
    int
    参数
  • 为单个参数提供默认值。换句话说,构造函数调用
    Iterator()
    Iterator(0)
    将得到相同的结果
  • :i(i)
    是一个初始值设定项列表。它将成员变量
    i
    (这是第一个
    i
    )分配给参数
    i
    (括号中的
    i
    )的值

    {};
    是构造函数的主体。这里没有发生其他事情,因此它被保留为空

    编写相同内容的更详细方式如下:

    Iterator(){
        i = 0;
    }
    
    Iterator(int index){
        i = index;
    }
    

    这个块和你所提供的行在大多数情况下都有相同的结果,虽然我对复杂的C++了解不多,但知道上面的内容是否适用于你所感兴趣的一些例子(比如<代码> const迭代器和索引=2 < /COD> >)< /p>你是否想问<代码> Iterator(int i=0):i(i){}是的。它是一个复杂的构造函数。

    int i
    除非你注意到了,否则它不是你的类的公共或私有成员-你可以通过
    Operator简单地访问它。它对每个人都是开放的。和
    i(i)
    bit正在初始化
    int
    的父类构造函数。谢谢!我不知道可以为成员变量分配参数。