首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于const成员函数的使用。解决方法

2013-10-01 
关于const成员函数的使用。我最近在看VC++2012经典入门这一书籍,在做练习时遇到一个问题需要请教大家。。是关

关于const成员函数的使用。
我最近在看VC++2012经典入门这一书籍,在做练习时遇到一个问题需要请教大家。。是关于类的const成员函数。
这是类的定义:

class CSimpleString
{
private:
   size_t len;
   char* buff;
public:
   CSimpleString(const char* p = nullptr);
   CSimpleString(const CSimpleString& s);
   CSimpleString(char c, int count=1);
   CSimpleString(int i);

   ~CSimpleString();

   CSimpleString& operator=(const CSimpleString& rhs);
   CSimpleString& operator=(CSimpleString&& rhs);          // Move assignment

   CSimpleString& operator+=(const CSimpleString& rhs);
   CSimpleString operator+(const CSimpleString& s);
   CSimpleString operator+(const char* s);

   void print();
};

问题出现了:
CSimpleString CSimpleString::operator+(const CSimpleString& s)
{
   cout << "Addition" << endl;
   size_t length = len + s.len + 1;
   char* tmp = new char[length];
   strcpy_s(tmp, length, buff);
   strcat_s(tmp, length, s.buff);

   return CSimpleString(tmp);
}

为什么这个不能把这个成员函数定义为const函数,函数并没有改变数据成员啊??
求各位大神解惑!感激不尽。。 vc++ C++基础
[解决办法]

const CSimpleString A = "123";
const CSimpleString B = "456";
const CSimpleString C = A+B; //如果操作符+不是const函数,这行就过不了编译。

我认为是可以定义为 const 函数的,但不可以返回 const & .
[解决办法]
实测了一下,我这里可以正常编译运行。
楼主说“不能把这个成员函数定义为const函数”,那具体是怎么“不能”呢。
是编译出错,还是运行出错,把错误信息贴一下吧。

热点排行