Thinking in Java研究 单根继承结构

thinking in java 中文第三版1.8.2

写道
单根继承结构以及在堆上创建所有对象,极大地简化了参数传递(这在 C++中是十分复杂的话题之一)
大按她 写道
C++里面有值传递和地址传递两种。如果是值传递的话,就会有这样的问题:如果一个函数接受一个父类对象作为参数,而实际传递的是子类的话,就会有问题

因为传递的是值,也就是说在被调用函数的内部会产生一个新的对象,这个对象跟传递进来的那个参数对象值应该是一样的

对象按值传递,那对象就是在栈上创建

对象不是单根继承,因此在传递的时候会有“对象切片”的特性。就是说,子类对象复制给一个父类对象时,子类对象特有的属性会被丢弃

另外,还有对象赋值的问题

比如Object o1 = o2; 在Java里就是引用赋值,而在C++里面会启动拷贝构造函数。这也是因为对象在栈上而不在堆上

在Java里面,o1和o2指向堆上面的同一个对象。而在C++里面,刚刚那句话就会在栈上面创建两个不同的对象

错了,那个不是调用拷贝构造函数,而是“=”操作符重载。。。拷贝构造函数是在参数传递的时候用……但是原理是差不多的

 

你可能感兴趣的:(java,C++,c,C#)