如何在 class 中重载 C++ 中的 [] 运算符
How to overload the [] operator in c++ in a class
在我的 class 中,我们正在经历 C++ 中的运算符重载。我正在研究我们的练习题之一,以帮助我们学习重载和使用友元函数的基础知识。这是第一个要求我重载我的教授没有提供的运算符的问题。提示是写一个函数可以通过cout << Sam[int] << endl;
访问Marks
class里面的testScores
。我相信这样做的方法是重载 []
运算符以输出 testScores[int]
但我可能不正确。我正在尝试编写重载函数,但我收到一个错误,指出 operator[] 必须是一个成员函数,据我所知。我不是 100% 确定我实现重载函数的方式是否有效,但无论如何我都无法测试它,直到我发现我做错了什么 visual studio 看不到我将它作为成员包含在内.
这是class:
#pragma once
#include<iostream>
using namespace std;
class Marks
{
private:
int testScores[3];
public:
Marks();
Marks(int, int, int);
friend int& operator[](int, Marks&);///here it says operator[] must be a member function
};
下面是我尝试实现重载函数的方式:
int& operator[](int index, Marks& p) {
int temp;
temp = p.testScores[index];//I cannot access testScores because it says operator[] isn't a member of Marks.
return temp;
}
上述实施可能无法正常工作,但我现在显然遇到了除此之外的问题。
这是实际提示要求我做的:
在下面的class object 实例化中, class Markes 和 header 的写法是通过下面的方式来输出Sam的私有变量tesctScores[3]。
使用此提供的 int 主代码:
int main(){
Marks Sam(99, 100, 89);
cout<<Sam[0]<<endl;
cout<<Sam[1]<<endl;
cout<<Sam[2]<<endl;
}
是否无法重载 []
而我应该尝试重载 <<
?我认为那里的超载会导致 endl;
出现问题。任何人关于为什么 visual studio 没有检测到我的重载函数是 class Marks 的成员的意见?
a[b]
(a).operator[](b)
cannot be non-member
所以编译器说你 operator[] 必须是一个成员函数是绝对正确的。您需要在 class.
中重载 operator[]
class Marks
{
private:
int testScores[3];
public:
Marks();
Marks(int, int, int);
int& operator[](std::size_t idx);
};
int& Marks::operator[](std::size_t idx) {
return testScores[idx];
}
在我的 class 中,我们正在经历 C++ 中的运算符重载。我正在研究我们的练习题之一,以帮助我们学习重载和使用友元函数的基础知识。这是第一个要求我重载我的教授没有提供的运算符的问题。提示是写一个函数可以通过cout << Sam[int] << endl;
访问Marks
class里面的testScores
。我相信这样做的方法是重载 []
运算符以输出 testScores[int]
但我可能不正确。我正在尝试编写重载函数,但我收到一个错误,指出 operator[] 必须是一个成员函数,据我所知。我不是 100% 确定我实现重载函数的方式是否有效,但无论如何我都无法测试它,直到我发现我做错了什么 visual studio 看不到我将它作为成员包含在内.
这是class:
#pragma once
#include<iostream>
using namespace std;
class Marks
{
private:
int testScores[3];
public:
Marks();
Marks(int, int, int);
friend int& operator[](int, Marks&);///here it says operator[] must be a member function
};
下面是我尝试实现重载函数的方式:
int& operator[](int index, Marks& p) {
int temp;
temp = p.testScores[index];//I cannot access testScores because it says operator[] isn't a member of Marks.
return temp;
}
上述实施可能无法正常工作,但我现在显然遇到了除此之外的问题。
这是实际提示要求我做的: 在下面的class object 实例化中, class Markes 和 header 的写法是通过下面的方式来输出Sam的私有变量tesctScores[3]。
使用此提供的 int 主代码:
int main(){
Marks Sam(99, 100, 89);
cout<<Sam[0]<<endl;
cout<<Sam[1]<<endl;
cout<<Sam[2]<<endl;
}
是否无法重载 []
而我应该尝试重载 <<
?我认为那里的超载会导致 endl;
出现问题。任何人关于为什么 visual studio 没有检测到我的重载函数是 class Marks 的成员的意见?
a[b]
(a).operator[](b)
cannot be non-member
所以编译器说你 operator[] 必须是一个成员函数是绝对正确的。您需要在 class.
中重载operator[]
class Marks
{
private:
int testScores[3];
public:
Marks();
Marks(int, int, int);
int& operator[](std::size_t idx);
};
int& Marks::operator[](std::size_t idx) {
return testScores[idx];
}