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
的父类构造函数。谢谢!我不知道可以为成员变量分配参数。