2013-05-09 145 views
1

我在一个赋值中被要求实现IntList,这是一个动态int数组列表,其中包含“int * p”作为其私有成员。在执行所有方法(添加,查找,删除等)后,我找不到如何执行返回的公共方法:从C++中的int指针返回一个只读指针

  • 获取指向基础数组的只读指针。

我怎样才能返回一个指针* p数字,其内容不能改变?

+1

上阅读了' const'关键字 – JustSid 2013-05-09 00:06:42

回答

2

你需要写类似这样的代码:

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 ::得到()” :)

+1

不要忘记释放A的析构函数中的选项卡,否则会泄漏内存!另外请注意,在A被销毁之后,指向标签的指针将会停顿。这应该就足够了: '〜A(){delete [] tab; }' – Eliot 2013-09-27 04:13:46

1

您必须在方法签名中使用const关键字来告诉编译器,返回的内容是常量或不可修改的。既然你要返回一个指针,你还必须弄清楚如何区分“无法修改的指针”和“无法修改的数据指针”,以及如何指定你想。

+0

我想我需要“指向无法修改的数据的指针”,并尝试所有atm,但仍然可以更改方法结果。 – 2013-05-09 00:16:45

0

你声明一个指针常量类型,像这样

type const * 

所以一个成员函数返回一个指向一个const类型的声明看起来像这样

type const * memberfunction(); 

替换为字类型无论你正在返回什么类型。

你返回的内容不能改变,因为它是const。所以它不能出现在赋值运算符的左侧,即=;它不能通过非常量参数传递给函数或方法,除非抛弃一般我不推荐的常量。