【发布时间】:2013-11-20 11:07:45
【问题描述】:
用 C++ 编程,掌握继承。我的程序创建了一个类,然后创建了一个继承自第一个类的新类。第一个是双精度向量,第二个是整数坐标向量(定义为结构)。适用于父类的算法不适用于子类。 为了解决这个问题,我一直在更改父类中的一些函数以使用内存地址而不是值,特别是方括号 [] 运算符,它返回向量中该条目的值(或者更确切地说,现在返回那个地址入口)。更改程序的后面部分以使用给定地址处的值,而不是立即期望一个值,这是行不通的,在广泛的谷歌搜索和笔记阅读之后,我无法弄清楚为什么。相关部分代码示例如下:
方括号运算符
//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]
说 * 的运算符必须是指针,但我确信方括号函数返回的是指针。
【问题讨论】:
-
这并不完全清楚。 “整数坐标向量”不是“双精度向量”,所以我不确定让一个从另一个继承是否有意义。
-
另外,请构造一个minimal test-case 来证明您的编译错误。
-
我尝试修复代码的格式,但不确定是否正确,因为它缺少几个
}。此外,当你throw时,你必须扔东西;当您想重新抛出捕获的异常时,您只能在catch子句中单独使用throw;。
标签: c++ function pointers inheritance virtual