语句问题!

fificake1 2003-10-09 12:49:45
virtual void AssertValid() const;
这个定义语句中的 const 有什么用?有和没有有什么区别?谢谢大虾指点。
...全文
36 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fificake1 2003-10-09
  • 打赏
  • 举报
回复
现在明白了,谢谢你们的讲解,我好高兴,呵呵!
njSeeWhy 2003-10-09
  • 打赏
  • 举报
回复
假设我们有一个类A,它有一个私有成员变量
int a_;
还有一个公有成员函数getA用来返回a_的值,但不会修改它:
int getA(void)
{
return a_;
}
.那么,当我们定义了一个变量:
const A a;
时,下列语句将无法通过编译:
a.getA();
因为虽然getA不会修改成员变量的值,也就是说不会破坏a的常量性,但是编译器并不知道,为了保证a的常量性不被意外地破坏,编译器只允许在声明的最后加了const的函数被常量对象调用,也就是说,如果要想通过常量对象来调用getA,则getA应该声明如下:
int getA() const;
不知道这样讲楼主是否明白了.
Wolf0403 2003-10-09
  • 打赏
  • 举报
回复
我说的最多和重载有关,和多态无关^_^
通过重载我们就可以发现,一个常量对象只能调用用 const 标记了的成员函数,因为它们不会改变对象内容。
liao2001 2003-10-09
  • 打赏
  • 举报
回复
看看常成员函数和常对象的相关章节会对你有所帮助
fificake1 2003-10-09
  • 打赏
  • 举报
回复
感觉你说的象多态性样。
fificake1 2003-10-09
  • 打赏
  • 举报
回复
不太明白,请你再讲讲,谢谢你!
Wolf0403 2003-10-09
  • 打赏
  • 举报
回复
成员函数最后加一个 const 表示不会修改对象信息,所以可以从 const 对象上调用。
看看 vector 的 begin() 的两个重载:
iterator begin();
const_iterator begin() const;
如果有 const vector<int> v; 则 v.begin() 返回的就是 const_iterator。如果 v 是非 const 的 vector 则 begin() 返回 iterator

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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