运算符重载的私有函数
Private function for operator overload
我正在学习 C++ 中的运算符重载。为了尝试一下,我重载了 [] 运算符以打印给定索引处的值。当我将运算符重载成员函数定义为 public.
时,代码有效
然而,当我试图通过将重载方法定义为私有来做同样的事情时,代码不起作用。连运算符重载方法都不进入,完全跳过
有人可以向我解释我做错了什么吗?运算符重载方法是否必须仅 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;
}
提前致谢。
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 > sizeOfArray || index < 0)
应该是 if (index >= sizeOfArray || index < 0)
。
我正在学习 C++ 中的运算符重载。为了尝试一下,我重载了 [] 运算符以打印给定索引处的值。当我将运算符重载成员函数定义为 public.
时,代码有效然而,当我试图通过将重载方法定义为私有来做同样的事情时,代码不起作用。连运算符重载方法都不进入,完全跳过
有人可以向我解释我做错了什么吗?运算符重载方法是否必须仅 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;
}
提前致谢。
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 > sizeOfArray || index < 0)
应该是 if (index >= sizeOfArray || index < 0)
。