gpt4 book ai didi

c++ - 在 C++ 中,如何对提供指针的函数返回的值进行操作?

转载 作者:行者123 更新时间:2023-11-28 00:38:49 24 4
gpt4 key购买 nike

C++ 编程,掌握继承。我的程序创建了一个类,然后创建了一个继承自第一个类的新类。第一个是 double vector ,第二个是整数坐标 vector (定义为结构)。适用于父类的算法不适用于子类。为了解决这个问题,我一直在更改父类中的一些函数以使用内存地址而不是值,特别是方括号 [] 运算符,它返回 vector 中该条目的值(或者更确切地说,现在返回该条目的地址入口)。更改程序的后面部分以使用给定地址处的值,而不是立即期望值,这是行不通的,在大量谷歌搜索和笔记阅读之后我无法弄清楚原因。代码相关部分的示例是:

方括号运算符

//access data in vector
double * operator[](int index) {
if(index<0) {
cout<< "Index out of range" << endl;
throw;
}
else if (index>v.size()-1) {
cout<< "Index out of range" << endl;
throw;
}
double *ptr = &v[index];
return ptr;
}
//access data in vector (const)
const double * operator[](int index) const {
if(index<0) {
cout<< "Index out of range" << endl;
throw;
}
else if (index>v.size()-1) {
cout<< "Index out of range" << endl;
throw;
}
const double *ptr = &v[index];
return ptr;
}

以及使用上述运算符的函数之一

virtual bool comp(int i, int j) {
if(*v[i]<*v[j]) {
return true;
}
else
return false;
}

我在使用

时遇到错误
*v[i]<*v[j]

说 * 的运算符必须是指针,但我确信方括号函数返回的是指针。

最佳答案

与您奇怪的界面不同,vector 的 []返回一个引用,而不是一个指针。所以要比较 vector 元素,你只需要 v[i] < v[j] . (这是假设 vstd::vector<double> ;您的描述和它的其他用途暗示是这种情况,但您忘记包含确切的声明)。

顺便说一下,使用 if (...) return true; else return false; 没有意义将 bool 表达式转换为完全相同的 bool 值。 return ...;更容易阅读。更一般地说,您应该对代码进行布局以使结构易于遵循;我的大脑开始融化,弄清楚它应该做什么。

关于c++ - 在 C++ 中,如何对提供指针的函数返回的值进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19859070/

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