使用指针访问类中存在的数组

时间:2015-11-24 13:13:05

标签: c++ sorting pointers quicksort

#include <iostream>

using namespace std;

class sort_overload
{
    int a[10];
public:
    void sort(int ,int);
    void display();
    void getdata();
}s;

void sort_overload::sort(int first,int last) //quick sorting
{
    int sort_overload :: *sp = &sort_overload :: a[0]; //pointer to the         base address of a present in class sorted_overload

sort_overload *sp_obj = &s; 
int pivot = sp_obj->*(sp+last);
int i=first,j=last;
int temp;

if(i<j)
{

    while((sp_obj->*(sp+i)) < pivot)
        i++;
    while((sp_obj->*(sp+j)) > pivot)
        j--;
    if(i<j)
    {
        temp = (sp_obj->*(sp+i));
        (sp_obj->*(sp+i)) = (sp_obj->*(sp+j));
        sp_obj->*(sp+j) = pivot;
        sp_obj->*(sp+last)=temp;
    }
}

    s.sort(first,j-1);
    s.sort(j+1,last);

}
void sort_overload::display()
{
    int sort_overload :: *sp = &sort_overload :: a;
    sort_overload *sp_obj = &s;
    for(int i=0;i<10;i++)
        cout<<"Sorted array numbers:"<<sp_obj->*(sp+i)<<endl;

}
void sort_overload::getdata()
{
    int sort_overload:: *sp = &sort_overload :: a;
    sort_overload *sp_obj = &s;
    cout<<"Enter numbers";
    for(int i=0;i<10;i++)
        cin>>sp_obj->*(sp+i);
}

int main()
{
    s.getdata();
    s.sort(0,9);
    s.display();
    return 0;
}

这句话给我一个错误:

int sort_overload :: *sp = &sort_overload :: a[0];

有人可以告诉我为什么会出现这个错误吗?

我尝试对10个整数值进行排序,并进一步重载它以对double和float值进行排序,但我仍然停留在排序部分。

1 个答案:

答案 0 :(得分:2)

void sort_overload::sort(int first,int last)

是您班级的成员函数,您可以通过替换

来访问您的阵列
int sort_overload :: *sp = &sort_overload :: a[0];

通过

int *sp = this->a;

或者更好的方法是使用this->a代替sp

您无法使用语法:

&sort_overload :: a[0];

因为您的数组不是静态属性。