请问构造函数后加冒号是什么意思?

为轮子而生 2010-05-11 06:43:56
#include <vector>
#include <iostream>
using namespace std;

class iStack
{
public:
iStack( int capacity ) : _stack( capacity ), _top( 0 ) {} //冒号后面的内容全然不懂什么意思,烦请讲解

bool pop( int &value );
bool push( int value );

bool full();
bool empty();
void display();

int size();

private:
int _top;
vector< int > _stack;
};
...全文
2563 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
maori 2011-04-16
  • 打赏
  • 举报
回复
那括号里就是初始化的值咯?
kui27 2010-05-11
  • 打赏
  • 举报
回复
学习,昨天刚看过这段代码,今天才搞清楚怎么回事。。。
不过栈的使用还没搞清楚。。。
wade_2003 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rocmemory 的回复:]
1. _stack( capacity ), _top( 0 )和下面的bool full()一样吗?
2. _stack在后面的private里已经有定义了,为什么在前面还要这样_stack( capacity )定义呢?
3. _top(0)是成员函数吗?返回值是什么类型?后面空的{}又是什么意思呢?
[/Quote]
1.不一样,前者是初始化列表,后者是成员函数
2.创建临时变量,赋值_stack
3.不是成员函数,是给变量_top赋初值0
song890823 2010-05-11
  • 打赏
  • 举报
回复
后面是紧跟着初始化的列表~~~
we_sky2008 2010-05-11
  • 打赏
  • 举报
回复

iStack( int capacity )
{
_stack( capacity );//创建一个局部临时对象
_top( 0 );
}
//上面成员对象_stack被缺省构造;而函数体内的_stack( capacity );是创建一个局部临时对象

//并不等价于如下:
iStack( int capacity ) : _stack( capacity ), _top( 0 ) {}


we_sky2008 2010-05-11
  • 打赏
  • 举报
回复
构造函数后加冒号是初始化表达式:
有四种情况下应该使用初始化表达式来初始化成员:
1:初始化const成员
2:初始化引用成员
3:当调用基类的构造函数,而它拥有一组参数时
4:当调用成员类的构造函数,而它拥有一组参数时
elegant87 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rocmemory 的回复:]

1. _stack( capacity ), _top( 0 )和下面的bool full()一样吗?
2. _stack在后面的private里已经有定义了,为什么在前面还要这样_stack( capacity )定义呢?
3. _top(0)是成员函数吗?返回值是什么类型?后面空的{}又是什么意思呢?
[/Quote]
1.不一样的。_stack( capacity ), _top( 0 )是初始化数据的
2._stack( capacity )不是定义,是初始化
3._top(0)不是成员函数,也是初始化。

类的构造函数有两种初始化数据的方法,这是一种。
为轮子而生 2010-05-11
  • 打赏
  • 举报
回复
1. _stack( capacity ), _top( 0 )和下面的bool full()一样吗?
2. _stack在后面的private里已经有定义了,为什么在前面还要这样_stack( capacity )定义呢?
3. _top(0)是成员函数吗?返回值是什么类型?后面空的{}又是什么意思呢?
findcsdn 2010-05-11
  • 打赏
  • 举报
回复

冒号后面是初始化类的参数, 这个运行时机是在构造函数前,第一次初始化类成员。

有些参数不能在构造函数中初始化,因为当轮到构造参数运行的时候,有些类类型的成员已经被初始化了。

所以要掌握好这类初始化形式的使用。

elegant87 2010-05-11
  • 打赏
  • 举报
回复

iStack( int capacity ) : _stack( capacity ), _top( 0 ) {} //冒号后面的内容全然不懂什么意思,烦请讲解

//冒号后面的内容是初始化类的数据成员 _top;_stack;
也可以这样写
iStack( int capacity )
{
_stack( capacity );
_top( 0 );
}

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧