设计问题讨论,代码5行

hello_world0000 2014-03-14 11:39:19
class a
{
public
t* getT();
private:
t *tt;
}
场景:
类有一个返回类内成员指针的函数,他不是const函数(因为设计上允许外部直接修改内部成员,这个设计虽然不合适,但牵涉太多,不能更改)
问题
有一个const对象想调用这个函数,但不能调用,因为他不是const函数

如果改成const函数,则返回值如果不是const指针,有违常规设计意义
如果新增一个const函数返回const指针,代码有冗余 ,函数名也好起,都叫一个名字容易混淆,叫两个不知道叫什么好

讨论怎么设计合适?
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
derekrose 2014-03-14
  • 打赏
  • 举报
回复
增加const函数 nonconst函数调用const函数 避免代码重复
Walle_Oyq 2014-03-14
  • 打赏
  • 举报
回复
一般对于一个私有成员变量的处理是这样的: 比如是一个int类型的变量,那么得到变量值:

const  int  GetValue ( void ) const ; // 第一个const表示这个函数返回的值是 const类型,不能被修改
                                                              // 第二个表示这个函数不能修改这个值。
设置这个int类型的变量:

void  SetValue (const int  value);      // 参数前面的 const 表示传入的这个参数不能被修改,只能被用于赋值。
如果发生 const 与非 const 的问题, 就调用 const_cast 去转化这个常量属性。
Walle_Oyq 2014-03-14
  • 打赏
  • 举报
回复
使用 const_cast 进行转化
  • 打赏
  • 举报
回复
class CTest { public: int *GetP() { return &m_a; } private: int m_a; }; int main(int argc, char *argv[]) { CTest t; const CTest *p = &t; const_cast<CTest*>(p)->GetP(); return 0; }
hello_world0000 2014-03-14
  • 打赏
  • 举报
回复
确定一个名字吗 那样findreferance其实不怎么好找 当你想确定哪里修改了 还是都会搜到 分成两个函数的意义不明显了
mujiok2003 2014-03-14
  • 打赏
  • 举报
回复
引用
如果新增一个const函数返回const指针,代码有冗余 ,函数名也好起,都叫一个名字容易混淆,叫两个不知道叫什么好
就用同一个名字, 重载。代码冗余的问题好解决: 把冗余的部分抽成第三个函数。
hello_world0000 2014-03-14
  • 打赏
  • 举报
回复
函数名有什么建议吗

65,209

社区成员

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

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