Частная функция для перегрузки оператора

Я учусь о перегрузке операторов в 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;
}

Заранее спасибо.

0

Решение

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),

2

Другие решения


По вопросам рекламы [email protected]