老师,这个java无参构造函数对应到C++里怎么写呢?

来源:2-2 二次封装属于我们自己的数组

神经旷野舞者

2018-07-10

//img.mukewang.com/szimg/5b4389e200014bb403050057.jpg

这里的这个没看懂,并没有定义capacity这个变量,把10传递进来是什么意思?是不是Array() 会自动调用Array(10)呢?

如果写成C++,是不是下面这样写很多:

Array(){
   data = new int[10];
  size = 0;
}
我猜应该是
Array() {
    Array(10);
}

不过C++的类里面定义数组总是报错,说不可以定义数组,C++里面这种情况怎么处理呢?问了个无关的问题:)

我知道了,java里int[] data;是不是其实也是个指针,所以C++里用int* data?

写回答

1回答

liuyubobobo

2018-07-10

首先,在你的截图中,this(capacity:10); 中的capacity,是IDE给出的参数提示,这个“capacity”不是Java语法,印象里课程中提到过。


其次,在我们的Array类的实现中,有两个构造函数:

// 构造函数,传入数组的容量capacity构造Array    
public Array(int capacity){    
    data = new int[capacity];    
    size = 0;    
}   
 
// 无参数的构造函数,默认数组的容量capacity=10    
public Array(){    
    this(10);    
}


第二个构造函数,是没有参数的构造函数。指用户使用这个构造函数的时候,可以不传任何参数。相比第一个构造函数,用户必须传入一个capacity参数。但是第二个构造函数的内部逻辑,是使用了一个默认值10,作为capacity,用这个默认值去调用第一个构造函数。


---


在Java中,一切对象都是引用,在Java语境中的引用,和C++中的指针近乎是一个意思:)是的,所以在C++中,类里面,data应该是int*类型的:)


---


我暂时还没来得及为这个课程添加C++语言的官方代码。不过有同学在学习这个课程的时候,自己使用C++语言对课程中所有的内容进行了实现(虽然还没有完全实现完,但也已经有90%了).如果在学习这个课程的过程中,自己使用C++进行实现遇到问题,可以参考这位同学的代码:)

github链接:https://github.com/houpengfei88/Play-with-Data-Structures


也可以在Github上和这位同学(侯鹏飞)交流具体的C++实现细节;或者加入课程的官方Q群,和 @侯鹏飞 交流C++实现相关的问题:)侯鹏飞同学是为非常热心的同学:)


加油!

1
3
liuyubobobo
回复
神经旷野舞者
大佬现身,快来围观!:P
2018-07-11
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程