【问题标题】:Private function for operator overload运算符重载的私有函数
【发布时间】:2015-02-13 07:09:15
【问题描述】:

我正在学习 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;
}

提前致谢。

【问题讨论】:

  • 你认为main()为什么可以访问你班级的私人成员?
  • Arr[index] 用于公共运算符方法..我现在已经评论它并添加了 cmets

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


【解决方案1】:

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

void test(int index) const;

// ...

void NArray::test(int index) const
{
    (*this)[index];
}

另外,operator[] 中有一个错误 - if (index &gt; sizeOfArray || index &lt; 0) 应该是 if (index &gt;= sizeOfArray || index &lt; 0)

【讨论】:

  • 成功了!我会将此标记为答案。你能解释一下array[index]有什么问题吗?我不明白。
  • @IEEE754 :它本身并没有什么问题,只是它没有按照你说的去做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多