读书人

operator =(const CTextamp; text)中出现

发布时间: 2012-03-02 14:40:29 作者: rapoo

operator =(const CText& text)中出现的问题
class CText
{
public:
CText& operator =(const CText& text)
{
this-> nCount=text.GetCount();//此处出现问题,为什么?
//this-> nCount=text.nCount;//用这种方式却没有问题。
}
int GetCount()
{
return nCount;
}
private:
int nCount;

};
虽然去掉const可以编译通过.
this-> nCount=text.GetCount();//此处出现问题,为什么?
//this-> nCount=text.nCount;//用这种方式却没有问题。


[解决办法]
修改1 GetCount 修改为 常成员函数
修改2 operator = 运算符重载时候, 参数不使用 const 属性 ~
[解决办法]

class A{public:
void print(){ cout < < "hello " < < endl; }
}

A a;
A const b;
a.print(); //ok
b.print(); //error

将print()改成这样就能运行:
void print() const{ cout < <  "hello " < < endl; }

成员函数后面的const 表示这个函数不修改数据成员.
因为常量的基本要求,就是不能改变,因此,常量可以调用的函数也只能是表明不修改数据成员的常函数才符合语义的要求.

b.print(); //ok, 常量可以调用常函数


CText& operator =(const CText& text)
text是个常量,所以要求只能调用常函数.

读书人网 >C++

热点推荐