gpt4 book ai didi

c++ - 运算符重载的私有(private)函数

转载 作者:行者123 更新时间:2023-11-28 02:32:45 24 4
gpt4 key购买 nike

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

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

有人可以向我解释我做错了什么吗?运算符重载方法是否必须只公开?

这是我的代码:-

#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直接地。尝试更改 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) .

关于c++ - 运算符重载的私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28494273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com