问个类相关定义的问题,急
#include <iostream>using std::cout;
using std::cin;
using std::endl;
class heapify
{
public:
heapify(int n);
void heapify_init(int *s,int n);
void heapify_output();
private:
void heapify_build();
void heapify_max();
int *a;
int n1;
int n2;
};
heapify::heapify(int n)
{
a=new int[n];
n1=n;
}
void heapify::heapify_max(int i)
{
int left=2*i+1,right=2*i+2,largest,key;
largest=i;
if(left<=n2&&*(a+left)>*(a+i))
largest=left;
if(right<=n2&&*(a+right)>*(a+largest))
largest=right;
if(i!=largest){
key=*(a+largest);
*(a+largest)=*(a+i);
*(a+i)=key;
heapify::heapify_max(largest); ----------------------》这个地方进行自我调用 前缀heapify:: 可以不可以省略
}
}
void heapify::heapify_build()
{
for(i=n2/2;i>=0;i--)
heapify_max(i); --------》私有函数调用私有函数 heapify_max也就是上面的一个函数,这个地方要不加上heapify :: 说明
}
void heapify::heapify_init(int *s,int n)
{
n2=n;
if(n>n1){
printf("overflow");
exit(0);
}
for(int i=0;i<n;i++)
*(a+i)=*(s+i);
heapify_build();
}
最后一个问题,这个类成员函数的互相调用是否也存在作用域的问题
也就是像C语言一样,如果函数调用另外一个函数,而这个被调用函数是在后面定义的,那么就必须在调用函数内声明被调用函数
是否要有 heapify::这个前缀