关于const成员函数的使用。解决思路
关于const成员函数的使用。
我最近在看VC++2012经典入门这一书籍,在做练习时遇到一个问题需要请教大家。。是关于类的const成员函数。
这是类的定义:
问题出现了:
为什么这个不能把这个成员函数定义为const函数,函数并没有改变数据成员啊??
求各位大神解惑!感激不尽。。
------解决方案--------------------
const CSimpleString A = "123";
const CSimpleString B = "456";
const CSimpleString C = A+B; //如果操作符+不是const函数,这行就过不了编译。
我认为是可以定义为 const 函数的,但不可以返回 const & .
------解决方案--------------------
实测了一下,我这里可以正常编译运行。
楼主说“不能把这个成员函数定义为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函数,函数并没有改变数据成员啊??
求各位大神解惑!感激不尽。。
------解决方案--------------------
const CSimpleString A = "123";
const CSimpleString B = "456";
const CSimpleString C = A+B; //如果操作符+不是const函数,这行就过不了编译。
我认为是可以定义为 const 函数的,但不可以返回 const & .
------解决方案--------------------
实测了一下,我这里可以正常编译运行。
楼主说“不能把这个成员函数定义为const函数”,那具体是怎么“不能”呢。
是编译出错,还是运行出错,把错误信息贴一下吧。