一个关于模板类的问题 const object &read() const 是什么意思

vvilp 2009-02-14 04:04:11
在写模板类的时候 书上是这种写法


template <typename object>
class mem{
public :
explicit mem(const object &initialvale = object()):storedvalue(initialvalue){}//这一句是什么意思?
const object &read() const{//这种函数的写法是什么意思 为什么要这么写? 我用普通的函数不能实现这个功能马?
似乎operater的写法也是这样的 能否详细解释一下 (书上很乱 )
return storedvalue;
}
};

=====================
请各位帮我解释一下上面两个问题 感激不尽阿
...全文
203 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2009-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
第一个是初始化列表,

常成员,带参基类构造函数,引用,无默认构造函数的成员

第二个,最后的是const表示这是一个常函数,调用这个函数不会改变成员(mutable的除外)
常对象能调用的非静态成员函数是常函数.
[/Quote]
UP
基本上都说查不多了
第一个是初始化列表 利用构造函数 里面的类型是 常量成员 对象引用 还有构造函数
第二个const object &read() const 是一个常函数的应用 调用的时候 不会改变类的成员的值
waizqfor 2009-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
第一个是初始化列表,

常成员,带参基类构造函数,引用,无默认构造函数的成员

第二个,最后的是const表示这是一个常函数,调用这个函数不会改变成员(mutable的除外)
常对象能调用的非静态成员函数是常函数.
[/Quote]
UP
基本上都说查不多了
第一个是初始化列表 利用构造函数 里面的类型是 常量成员 对象引用 还有构造函数
第二个const object &read() const 是一个常函数的应用 调用的时候 不会改变类的成员的值
捕鲸叉 2009-02-14
  • 打赏
  • 举报
回复
这个函数返回常引用(const object &),并且不改变成员变量的值(后面那个const)。
tangshuiling 2009-02-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 vvilp 的帖子:]
在写模板类的时候 书上是这种写法


C/C++ code
template <typename object>
class mem{
public :
explicit mem(const object &initialvale = object()):storedvalue(initialvalue){}//这一句是什么意思?
const object &read() const{//这种函数的写法是什么意思 为什么要这么写? 我用普通的函数不能实现这个功能马?
似乎operater的写法也是这样的 能否详细解释一下 (书上很乱 )
return stored…
[/Quote]

尝试用多数人能懂的方式解释楼主的疑问!
template <typename object> 模板声明,object为一个任意的类型名称
const object &initialvale = object() 单看object(),直接把object想象成任意可能的类型,比如int,float
class或union、enum都行.如果是int 那就成了
const int& initialvale=int()
如果是自定义类类型:(比如test为楼主定义的类)那就成了
const test& initialvale=test() 这个test()自然就是调用test类的默认构造函数,产生一个类对象
:storedvalue(initialvalue) 这一部分无非就是初始化storedvalue,用参数列表中刚刚产生的对象
问题二:
const object &read() const 前面的const可以在一般的函数中出现,而后面的const是类成员函数专属
因此着重讲后面那个const,const本身就是一个限定符,后面那个const到底限定谁呢?既然是成员函数专属
那成员函数与普通函数最大的区别就是this指针,因此,后面的const限定的就是this指针所指。
由于普通函数没有this指针,也就不会有后面那个const存在的说法

  • 打赏
  • 举报
回复
explicit mem(const object &initialvale = object()):storedvalue(initialvalue){}
..没注意到这还有个问题。
:后的是初始化列表,storedvalue(initialvalue)表示在构造函数运行的时候对storedvalue以initialvalue进行初始化。
sagegz 2009-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
第一个是初始化列表,

常成员,带参基类构造函数,引用,无默认构造函数的成员

第二个,最后的是const表示这是一个常函数,调用这个函数不会改变成员(mutable的除外)
常对象能调用的非静态成员函数是常函数.
[/Quote]
还是飞雪大哥严谨!
feng4206yu 2009-02-14
  • 打赏
  • 举报
回复
补充一下:1.这里的object是一种类型,这由template <typename object>可以知道,在也就是说在模板instance后这里的object可能是int,float或者其他的类型
2.这样就很明显了:第一个是带初始化列表的构造函数,例如:
explicit mem(const int &initialvale = int()):storedvalue(initialvalue){}
explicit表示构造不能隐式进行,int()为0作为形参默认值,之后为参数化列表和函数体...
3.const object &read() const 第二个const表示该函数调用不会改变类成员值,一般作为类中成员函数..
OnlyAlone 2009-02-14
  • 打赏
  • 举报
回复
const object &read() const
名为read的类成员函数。
const object & 是返回值类型,如楼上说说

后面的const说明这个函数是常量函数(- -! 不记得这么说对不对,反正就是这个函数里不修改类的其它数据成员的值)
baihacker 2009-02-14
  • 打赏
  • 举报
回复
第一个是初始化列表,

常成员,带参基类构造函数,引用,无默认构造函数的成员

第二个,最后的是const表示这是一个常函数,调用这个函数不会改变成员(mutable的除外)
常对象能调用的非静态成员函数是常函数.
  • 打赏
  • 举报
回复
const object &read() const
名为read的类成员函数,返回数据类型为const object的引用。

65,210

社区成员

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

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