【发布时间】:2013-05-09 00:02:52
【问题描述】:
我在一项任务中被要求实现 IntList,它是动态 int 数组列表,其私有成员为“int *p”。实现所有方法(添加、查找、删除等)后,我不知道如何实现返回的公共方法:
- 获取指向底层数组的只读指针。
如何返回具有 *p 个数字的指针,其内容不能更改?
【问题讨论】:
-
阅读
const关键字
我在一项任务中被要求实现 IntList,它是动态 int 数组列表,其私有成员为“int *p”。实现所有方法(添加、查找、删除等)后,我不知道如何实现返回的公共方法:
如何返回具有 *p 个数字的指针,其内容不能更改?
【问题讨论】:
const关键字
你需要编写类似下面的代码:
class A {
int *tab;
public:
A() {
tab = new int[3];
tab[0] = 1;
tab[1] = 4;
tab[2] = 6;
}
const int * get() {
return tab;
}
};
int main() {
A *a = new A();
//(a->get())[0] = 2;
}
然后您将能够看到表格的内容,但无法在类之外更改它的值。
试图取消注释最后一行将导致得到这个 错误:分配只读位置'* a->A::get()' :)
【讨论】:
~A() { delete[] tab; }
您必须在方法签名中使用const 关键字来告诉编译器返回的内容是常量或不可修改的。由于您要返回一个指针,因此您还必须弄清楚如何区分“无法修改的指针”和“指向无法修改的数据的指针”,以及如何指定哪个想要。
【讨论】:
你声明一个指向常量类型的指针,像这样
type const *
因此,返回指向 const 类型的指针的成员函数声明如下所示
type const * memberfunction();
用您返回的任何类型替换单词类型。
您返回的内容不能更改,因为它是 const。所以它不能出现在赋值运算符的左侧,即 = ;并且它不能通过非 const 参数传递给函数或方法,除非你抛弃我一般不推荐的 constsness。
【讨论】: