注册 登录
编程论坛 C++教室

问个类相关定义的问题,急

朱三哥 发布于 2013-04-27 12:44, 535 次点击
#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::这个前缀

4 回复
#2
peach54602013-04-27 12:58
1,可以省略
2,不用加
3,不用

PS:你完全搞不懂类,再去看书吧
#3
朱三哥2013-04-27 13:01
回复 2楼 peach5460
新手呀
这是我第一个用C++写 最大堆数据结构操作的程序
以前一直用C在学习东西

能说下原因吗?
#4
朱三哥2013-04-27 13:10
回复 2楼 peach5460
我是自学的。
几本教材上 对类 介绍了个框架
还请版主不辞辛苦 解答下
#5
peach54602013-04-27 15:57
额...怎么说呢,你写的是什么代码我没看
我就看了一下你的问题...

感觉你根本不知道什么是封装...
程序代码:

heapify::heapify_max(largest);      ----------------------》这个地方进行自我调用 前缀heapify::  可以不可以省略
heapify_max(i);     --------》私有函数调用私有函数 heapify_max也就是上面的一个函数,这个地方要不加上heapify :: 说明
最后一个问题,这个类成员函数的互相调用是否也存在作用域的问题


1,你知不知道为什么封装后需要public,protect,private用来做修饰...
2,你知不知道::这个是干嘛的?
3,你知不知道include在编译期间做了什么

基本上,你弄清楚这三个问题,你的问题就清楚了
第三个问题和c++无关,你说你学过C,应该清楚吧?
1