java中的引用于c++的指针的相互代替(就以创建简单的栈去讲解)

class node
{
    int data;
}

class MyStack        //null是代表不确定的对象
{
    private ArrayList<node>top=new ArrayList<node>();
    private node rear[];      //用这个的话只能同过node加Index下标的索引去得到数组的大小

    public boolean pushStack(node elem)
    {
        rear=new node[12];   //1、new 出的时引用
        node ee=new node();  //new 出的是对象再返回一个引用
        ee.data=666;
        rear[0]=ee;
        top.add(elem);       //2、将new出来的引用代替之前的null
        return true;         //3、1和2中这两种创建空间时创建的内容都相同,只不过ArrayList是动态的   
    }
    
    public node popStack()
    {
struct node
{
    int data;
};

//显然,在C++中NULL的值和0是等价的。然而这就引发了一个严重的重载问题,例如下面两个函数:
//void fun(int a, int *b); void fun(int a, int b);

 //可以看出我们想调用的是:void fun(int a, int *b);但实际上我们调用的是第二个函数

 //而C++11中添加的nullptr就可以解决这个重载问题,减少很多不必要的BUG,编译环境允许的话,还是多多使用nullptr吧。


class MyStack //NULL代表的是值#define NULL ((void *)0) { private: node * data=NULL; node * rear=NULL; public: bool InitStack() { data=new node[10]; //这个new是真正的创建了对象,而不是空引用但是这个对象是空的 //简单的说就是有空间没内容,而java是引用既没空间又没内容(自己这么一说让我觉得java还更加好些) //(因为反正数据要随着空间一起过来,提前放空间与放引用都一样,而且刚开始便分配空间反而会造成空间的浪费) //(可能相同的程序用c++要比用java用更多的空间) rear=data; return true; } bool pushStack(node &elem) { *data++=elem; //node * data与data[0]=elem和java中的node top[]与top[0]=elem最终的表现形式不是都相同的吗 //不同的是在访问数组的时候c++的指针可以通过位移用指针直接访问而java中如果是数组的只能用下标 //如果是ArrayList接口的具体实现类的话可以用它里面封装的方法如get,set remove等 //所以说java中要用这种具体的类去做数组的封装已实现一些c++中的指针的功能 return true; } node popStack() { return *--data; } };

 

        System.out.println(rear[0].data);
        return top.remove(top.size()-1);
    }

    public int GetSize()
    {
        return top.size();        
    }

}

 

posted @ 2019-10-08 21:40  pycodego  阅读(494)  评论(0编辑  收藏  举报