操作员过载的私有功能

时间:2015-02-13 07:09:15

标签: c++ operator-overloading private-methods

我正在学习C ++中的运算符重载。为了试一试,我重载[]运算符以在给定的索引处打印值。当我将运算符重载成员函数定义为public时,代码工作。

然而,当我尝试通过将重载方法定义为私有来做同样的事情时,代码不起作用。它甚至没有进入运算符重载方法并完全跳过它。

有人可以向我解释我做错了什么吗?操作员重载方法是否必须公开?

这是我的代码: -

#pragma once
class NArray
{
public:
    NArray(int size=100);

    int getValueAt(int index);
    ~NArray();

    void test(int index);
    //int operator[](int index) const;

private:
    int sizeOfArray;
    int array[100];

    int operator[](int index) const;
};


#include "NArray.h"
#include <iostream>

using namespace std;

NArray::NArray(int size)
{
    if (size > 0 && size <=100)
        sizeOfArray = size;
    else
        sizeOfArray = 100;

    for (int i = 0; i < sizeOfArray; i++)
    {
        array[i] = i;
    }
}


int NArray::getValueAt(int index)
{
    if (index > 0 && index <sizeOfArray)
    {
        return array[index];
    }
    else
    {
        return -1;
    }
}

int NArray::operator[](int index)const
{
    if (index > sizeOfArray || index < 0)
    {
        cout << "Index out of bounds" << endl;
        return -1;
    }
    else
    {
        cout << array[index] << endl;
        return array[index];
    }
}

void NArray::test(int index)
{
    array[index];
}

NArray::~NArray()
{
}

#include <iostream>
#include "NArray.h"

using namespace std;

int main()
{
    int size = 0;
    int index = 0;

    cout << "Enter Array Size:" << endl;
    cin >> size;

    NArray arr(size);

    cout << "Enter Index:" << endl;
    cin >> index;

    //This works for the public operator method
    //arr[index];

    //This does not
    arr.test(index);

    getchar();
    return 0;
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

test未使用NArray::operator [],而是直接访问array。尝试将array[index];更改为(*this)[index];内的NArray::test,并在您使用const时将其设为void test(int index) const; // ... void NArray::test(int index) const { (*this)[index]; } ,因为它没有修改任何内容:

operator[]

此外,if (index > sizeOfArray || index < 0)中有一个错误 - if (index >= sizeOfArray || index < 0)应为{{1}}。