有essentialC++的朋友看一下,这里是不是错了?

yugn 2002-08-14 05:33:51
近来看essential,看到p111页(倒数第九行),发现有个地方好像错了,不知道判断有没错,先问一下大家:

void example( const BigClass *pbc, BigClass &rbc)
{
pbc->val();//这会调用const版本
rbc.val(); //这会调用non-const版本
}

我觉得参数列表中的“BigClass”应该是上文中给出的“val_class”。因为上文明写出了定义:
class val_class{
public:
const BigClass& val() const { return _val;}
BigClass& val() { return _val; }
//...
};

如果参数列表不是这样:
void example( const val_class *pbc, val_class &rbc)

下面哪来
pbc->val();
rbc.val();
这两条语句呀?
撇开这个错误(如果是的话),这一段说得还几有价值的。可能很多warring都与const member function有关。不过在vc中我试过了,如果是const reference 参数调用了non-const的成员函数(即改变成员变量),将引起以下error:
Cannot convert 'this' pointer from 'const class xxx' to 'class xxx&'

...全文
58 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yugn 2002-08-16
  • 打赏
  • 举报
回复
大家可以到这里继续讨论
http://www.csdn.net/Expert/TopicView1.asp?id=947192
yugn 2002-08-16
  • 打赏
  • 举报
回复
不过上次我写了信给侯sir,但没见他有回复
yugn 2002-08-16
  • 打赏
  • 举报
回复
其实我觉得这本书挺好的,但是错误很有不少,从侯sir网站可以看到一部分勘误,有些还错得以致误导,所以我想在做笔记时尽量多的把错误找出来,然后反馈给候sir.
kwok_1980 2002-08-16
  • 打赏
  • 举报
回复
但,我认为不要着重于此,知道就好,
因为这一节主要不是讲这个,
不要顾此失彼啊!
kwok_1980 2002-08-16
  • 打赏
  • 举报
回复
to:yugn(小一)

你说对啦!不好意思!我看漏了!
是书的错误! :)
你看书比我仔细多啦!:)
youngbamboo 2002-08-16
  • 打赏
  • 举报
回复
yugn(小一)
捷在网站的勘误表里说原作者有时候就好把这些小地方搞混,但是大方向把握的很好。我也在研究这本书,给我留个练习方式先。
yugn 2002-08-16
  • 打赏
  • 举报
回复
很是上面两位知道我在说什么,太感谢了,希望多些朋友再来看一下!
yugn 2002-08-15
  • 打赏
  • 举报
回复
好像大家都说没错,但我觉得
void example( const val_class *pbc, val_class &rbc);

pbc 和 rbc 不是class val_class型别,pbc怎么可能可以指向val_class的成员:
pbc->val();
rbc怎么可能可以取val_class的成员:
rbc.val();
????????????????????????????????

yugn 2002-08-15
  • 打赏
  • 举报
回复
kangpang(康胖)
可否讲清楚一点呀!多说几句有分加
kangpang 2002-08-15
  • 打赏
  • 举报
回复
没有错
yugn 2002-08-15
  • 打赏
  • 举报
回复
答kwok_1980(Mars),有不同的:
void example( const BigClass *pbc, BigClass &rbc) //原书上
void example( const val_class *pbc, val_class &rbc);//我改的

可能大家没看清楚,我主要指上面函数中参数的型别有问题。大家再看看是不是错了。
因为原书中并没有BigClass的声明或定义(就不知道它是不是有val这个成员),而正好原书中的val_class有val成员的定义,所以我怀疑是英文原版的错误。
Tommy 2002-08-15
  • 打赏
  • 举报
回复
看来应该就是作者写错了
youngbamboo 2002-08-15
  • 打赏
  • 举报
回复
看到这里我也产生过疑惑,凭空冒出一个bigclass,我感觉可能是作者疏忽了这个细节了吧。还是改为void example( const val_class *pbc, val_class &rbc)合理
yugn 2002-08-15
  • 打赏
  • 举报
回复
来讲过话的人就认真再看一下,说说是错是对吧!好让我放分
Tommy 2002-08-15
  • 打赏
  • 举报
回复
有这本书,也不见得整天带在身上啊?
yugn 2002-08-15
  • 打赏
  • 举报
回复
难道这本好书没几个有吗?
kwok_1980 2002-08-14
  • 打赏
  • 举报
回复
class val_class{
public:
const BigClass& val() const { return _val;}
BigClass& val() { return _val; }
//...
};

这两个版本就是为了适应const 和non-const的object而写的!
正如书上所说的:
none of const reference class parameters can invoke the non-const
member in public interface.
书上同时也说了,现在大多数编译器对此只给予警告(waring)
kwok_1980 2002-08-14
  • 打赏
  • 举报
回复
有问题吗?
我怎么看不出啊!?!??

70,037

社区成员

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

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