为什么复制构造函数直接在C ++中使用私有属性

时间:2015-11-21 14:30:41

标签: c++ function class constructor

请看以下内容:

class node
{
    int freq;

public:
    node(const node &other)
    {
        freq = other.freq;
    }

    int getFreq()
    {
        return freq;
    }
};

效果很好。但是,当我用freq = obj.freq替换freq = obj.getFreq()时,它会给我这个错误:

'int node::getFreq(void)': cannot convert 'this' pointer from 'const node' to 'node &'

为什么呢? freq是私有成员,我们应该使用接口getFreq来访问它。

1 个答案:

答案 0 :(得分:4)

它不会编译,因为你的函数没有被声明为const

int getFreq() const; // accessor function that does not modify the object

因此,您无法使用const实例const node &obj来调用它。

访问obj.freq有效,因为它适应const实例,使obj.freq无法修改 - 使用成员函数执行此操作将是无意义的(缺少成员函数内的代码{ {1}}说明符可能(并且应该)需要可修改的实体。