快速业务通道

Java与C++编程的不同 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
(reference)。注意在C++中构造一个对象的时候是不使用关键字new的,只需要在变量的名字后面直接赋予构造函数的参数就可以了,例如:

Point p(1,2); /* 构造对象 p */

如果不跟参数赋值,则使用默认构造函数,例如:

Time now; /* 默认使用构造函数 Time::Time() */

这一点与Java很不同。在Java中,这个命令仅仅生成一个没有初始化的reference,而在C++中,它生成一个实际的对象。

当一个对象被赋给另一个对象变量的时候,实际的值将被拷贝。而在Java中,拷贝一个对象变量只不过是建立了另外一个指向对象的reference.拷贝一个C++的对象就像在Java中调用clone这个函数一样,而修改拷贝的值不会改变原对象的值。例如:

Point q = p; /* 拷贝p到q */ q.move(1, 1); /* 移动q而p不动,即q的值变了,而p的不变*/

多数情况下,C++中这种对象直接对值操作的特性使用起来很方便,但是也有些时候不尽如人意:

1.当需要一个函数中修改一个对象的值,必须记住要使用按引用调用call by reference (参见下面函数部分);

2.两个对象变量不能指向同一个对象实体。如果你要在C++中实现这种效果,必须使用指针pointer(参见下面指针部分);

3.一个对象变量只能存储一种特定的类型的值,如果你想要使用一个变量来存储不同子类的对象的值(多态ploymorphism),则需要使用指针;

4.如果你想在C++中使用一个变量来或者指向null或者指向一个实际的对象,则需要使用指针。

5.函数

在Java中,每一个函数必须或者是对象函数(instance method),或者是静态函数(static function)或称类函数。C++同样支持对象函数和静态函数(类函数),但同时C++也允许定义不属于任何类的函数,这些函数叫做全局函数(global functions)。

特别的是,每一个C++ 程序都从一个叫做 main的全局函数开始执行:

int main()   { ...   }

还有另外一个格式的main函数可以用来捕捉命令行参数,类似于Java的main函数,但是它要求关于C格式的数组和字符串的知识,这里就不介绍了。

按照习惯,通常如果程序执行成功, main 函数返回0,否则返回非零整数。

同Java一样,函数参数是通过值传递的(passed by value)。在Java中,函数无论如何都是可以修改对象的值的。然而在C++中,因为对象直接存储的是实际的值,而不是指向值的reference,也就是说传入函数的是一个实际值的拷贝,因此也就无法修改原来对象的值。

所以,C++ 有两种参数传递机制,同Java一样的按值调用(call by value) ,以及按地址调用(call by reference)。当一个参数是按reference传递时,函数可以修改其原始值。Call by reference 的参数前面有一个地址号 & 跟在参数类型的后面,例如:

void raiseSalary(Employee& e, double by)   { ...   }

下面是一个典型的利用call by reference的函数,在Java中是无法实现这样的功能的。

void swap(int& a, int& b)   { int temp = a;   a = b;   b = temp;   }

如果使用 swap(x, y)来调用这个函数,则reference参数 a 和 b 指向原实际参数x 和 y的位置,而不是它们的值的拷贝,因此这个函数可以实现实际交换这两个参数的值。

在C++中,每当需要实现修改原参数的值时你就可以使用按地址调用call by reference。

Java与C++编程的不同(4)

时间:2010-12-23

6.向量Vector

C++ 的向量结构结合了Java中数组和向量两者的优点。一个C++ 的向量可以方便的被访问,其容量又可以动态的增长。如果 T 是任意类型,则 vector 是一个元素为 T 类型的动态数组。下面的语句

vector a;

产生一个初始为空的向量。而语句

vector a(100);

生成一个初始有100个元素的向量。你可以使用push_back 函数来添加元素:

a.push_back(n);

调用a.pop_back() 从a中取出最

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号