简体   繁体   English

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

[英]Accessing an array present in a class using pointers

#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;
}

This statement gives me an error: 这句话给我一个错误:

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

Could somebody tell me why the error is coming up? 有人可以告诉我为什么会出现错误吗?

I'm trying to sort 10 integer values, and further overload it to sort double and float values as well, but I am stuck on the sorting part. 我正在尝试对10个整数值进行排序,并进一步对其进行重载以对double和float值进行排序,但我被困在排序部分。

Since 以来

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

is a member function of your class, you can can access your array by replacing 是您的类的成员函数,您可以通过替换来访问数组

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

by 通过

int *sp = this->a;

or better just use this->a instead of sp 或者更好的是使用this->a而不是sp

You cannot use the syntax : 您不能使用语法:

&sort_overload :: a[0];

because your array is not a static attribute. 因为您的数组不是静态属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM