现在的位置: 首页 > 综合 > 正文

c++和java的类转换的区别

2013年12月04日 ⁄ 综合 ⁄ 共 765字 ⁄ 字号 评论关闭

       派生类到基类的转换:c++中,可以使用它的地址对基类类型的指针进行赋值和初始化,还可以使用派生类型的引用初始化基类类型的引用。严格来说,对对象没有类似转换,编译器不会自动将派生类型对象转换为基类类型对象。这是与java的不同,java可以使用对象(严格来说实际上还是使用的对象的引用!!!!)

        其实java中传递一个对象,实际上操作的不是对象本身,而是这个对象的引用,而c++则严格区分了,如果传递对象引用就要加“&”符号,不加这个符号,就传递的是对象本身!!!!我认为这个才是最大的不同。。

      但是为什么c++仍然可以采用直接用对象初始化或赋值呢?这就需要采用复制构造函数和赋值操作符的功能了!!(来自于c++ primer 488页)

   

调用拷贝构造函数的情形

  在C++中,下面三种对象需要调用拷贝构造函数:

  1) 一个对象以值传递的方式传入函数体;

  2) 一个对象以值传递的方式从函数返回;

  3) 一个对象需要通过另外一个对象进行初始化;

  如果在前两种情况不使用拷贝构造函数的时候,就会导致一个指针指向已经被删除的内存空间。对于第三种情况来说,初始化和赋值的不同含义是构造函数调用的原因。事实上,拷贝构造函数是由普通构造函数和赋值操作符共同实现的。描述拷贝构造函数和赋值运算符的异同的参考资料有很多。

  拷贝构造函数不可以改变它所引用的对象,其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至栈溢出(Stack Overflow)。除了当对象传入函数的时候被隐式调用以外,拷贝构造函数在对象被函数返回的时候也同样的被调用。

抱歉!评论已关闭.