const 的使用

yakeezhao 2011-09-14 04:04:33
class myfunc10derive2
{
public:
myfunc10derive2(int id2) : m_id2(id2) {};
const myfunc10derive2 operator + (const myfunc10derive2& rhs) const
{
myfunc10derive2 md2(rhs);
md2.m_id2 += m_id2;
return md2;
}
const myfunc10derive2& operator ++ ()
{
m_id2++;
return const_cast<const myfunc10derive2&>(*this);
}
public:
int m_id2;
};
void func10()
{
const myfunc10derive2 md2_5(25);
md2_5.m_id3 = 99;
md2_5.operator ++(); // ---> 这句出错

myfunc10derive2 md2_6(26);
md2_6.operator ++();
md2_6.operator ++().operator ++(); // ---> 这句出错
}
错误是:cannot convert 'this' pointer from 'const myfunc10derive2' to 'myfunc10derive2 &'。 哪位高手能给解答一下?多多谢。
...全文
66 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yakeezhao 2011-09-14
  • 打赏
  • 举报
回复
多谢各位。
就想叫yoko 2011-09-14
  • 打赏
  • 举报
回复
1. const对象只能调用const成员函数, 什么是const成员函数, void fun() const; 这个是const成员函数

2. 引用无论是不是const, 一经初始化时绑定就不能引用其它变量,
那const引用有什么不同呢, 当引用为const时, 你就不能通过引用去修改它引用的变量了
yakeezhao 2011-09-14
  • 打赏
  • 举报
回复
谢谢各位老大的回复。问题的确是出在 “const myfunc10derive2& operator ++ ()”这句的const上面。

其实我想知道,这里的const是指定谁不变呢?是myfunc10derive2实例的地址吗?就好比 “const myfunc10derive2 md2_5(25);”这句,就是“md2_5”的地址不可以变,至于它的内容可以变(所以md2_5.m_id2 = 99;成功)。如果是这样的话,那么“md2_5.operator ++();”应该也可以调用啊,因为它返回的还是自己啊?

谢谢。
turing-complete 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]

C/C++ code
class myfunc10derive2
{
public:
myfunc10derive2(int id2) : m_id2(id2) {};
const myfunc10derive2 operator + (const myfunc10derive2& rhs) const
{
myfunc10derive2 md2(rhs);
md2.m_id2 += ……
[/Quote]

LZ又要学一个小时的新玩意儿了
pengzhixi 2011-09-14
  • 打赏
  • 举报
回复
class myfunc10derive2
{
public:
myfunc10derive2(int id2) : m_id2(id2) {};
const myfunc10derive2 operator + (const myfunc10derive2& rhs) const
{
myfunc10derive2 md2(rhs);
md2.m_id2 += m_id2;
return md2;
}
const myfunc10derive2& operator ++ ()const
{
m_id2++;
return const_cast<const myfunc10derive2&>(*this);
}
public:
mutable int m_id2;
};
void func10()
{
const myfunc10derive2 md2_5(25);
md2_5.m_id2 = 99;
md2_5.operator ++(); // ---> 这句出错

myfunc10derive2 md2_6(26);
md2_6.operator ++();
md2_6.operator ++().operator ++(); // ---> 这句出错
}
自己对比吧
turing-complete 2011-09-14
  • 打赏
  • 举报
回复
const myfunc10derive2 md2_5(25);


这不明明是个 const 对象嘛,你++它是改变它,当然编译器不肯了。
turing-complete 2011-09-14
  • 打赏
  • 举报
回复
贴代码有那么难嘛
class myfunc10derive2
{
public:
myfunc10derive2(int id2) : m_id2(id2) {};
const myfunc10derive2 operator + (const myfunc10derive2& rhs) const
{
myfunc10derive2 md2(rhs);
md2.m_id2 += m_id2;
return md2;
}
const myfunc10derive2& operator ++ ()
{
m_id2++;
return const_cast<const myfunc10derive2&>(*this);
}
public:
int m_id2;
};
void func10()
{
const myfunc10derive2 md2_5(25);
md2_5.m_id3 = 99;
md2_5.operator ++(); // ---> 这句出错

myfunc10derive2 md2_6(26);
md2_6.operator ++();
md2_6.operator ++().operator ++(); // ---> 这句出错
}

64,639

社区成员

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

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