1. 數據類型和變量
C++ 中的變量類型與Java很相似。像Java一樣,C++ 有int 和 double 類型。但是這些數字類型的取值范圍是依賴於機器的。比如在16位系統上,例如運行DOS 或Windows 3.x的PC機上,int 是雙字節(2-byte)的,取值范圍比Java的4-byte的int 要小很多。在這些機器上,如果 int 不夠用的話,你需要使用長整型long.
C++ 有 short 和 unsigned 類型來更有效的存儲數字。(我認為所謂有效是指更高的空間利用率。) 最好是盡量避免使用這些類型除非是空間利用的有效性對你的系統真的非常重要。
在C++中布爾型用 bool 表示,而不像在Java中用boolean.
C++ 中字符串類型用 string 表示。它與Java中的String 類型非常相似,但是,還是要逐一以下幾點不同之處:
1. C++ 字符串存儲ASCII 碼字符,而不是標准碼Unicode 字符
2. C++ 字符串是可以被修改的,而Java字符串的內容是不可修改的(immutable)。
3. 取子字符串的操作在 C++ 中叫做substr,這個命令s.substr(i, n) 從字符串s中取得從位置 i 始長度為n的子字符串。
4. 在C++中,你只能夠將字符串與其它字符串對象相串聯(concatenate),而不能夠與任意的對象相串聯。
5. C++中可以直接使用關系操作符 ==、 !=、 <、 <=、 >、 >= 來進行字符串比較,其中後面四個操作符是按字母順序進行比較的。 這比Java中使用函數equals和compareTo來比較要方便很多。
2. 變量和常量
在C++中,本地變量的定義看起來與Java中相同,例如:
int n = 5;
實際上這正是C++和Java的一個重要不同之處。C++編譯器不對本地變量進行初始化檢驗,所以在C++中很容易忘記初始化一個變量,這種情況下,變量的值該變量所占內存區域中剛好當前存在隨機值。這顯然是很容易產生程序出錯的地方。
與Java一樣, C++中類可以有數據域和靜態變量。不同的是,C++中變量可以在函數甚至是類的外面定義,這些所謂的全局變量可以在程序的任何函數中被訪問,因而不易被很好的管理。所C++中應該盡量避免使用全局變量。
在C++中,常量可以在任何地方被定義(記得在Java中,常量必須是類的靜態數據static data)。 C++ 使用關鍵字 const 來定義常量,而Java中是 final。例如:
const int DAYS_PER_YEAR = 365;
3. 類C++
中對類的定義與Java有些不同,這裡是一個例子:一個C++ 版本的Point 類:
class Point /* C++ */ { public: Point(); Point(double xval, double yval); void move(double dx, double dy); double getX() const; double getY() const; private: double x; double y; };
這裡幾點重要的不同是:
1. C++的類定義中分為公共和私有部分,分別以關鍵字 public 和 private開始。而在Java中,每一個元素都必須標明 public 或 private;
2. C++中類的定義只包含函數的聲明,真正的實現另外單獨列出;
3. 訪問函數(accessor methods)標有關鍵字 const ,表明這個函數不會改變本對象的元素值;
4. 類定義的結尾處有分號。
類中函數的實現跟在類的定義之後。因為函數是在類外面定義的,所以每一個函數的名字前面要加類名稱作為前綴,並使用操作符雙冒號::來分割類的名稱和函數的名稱。不改變隱含參數值(即當前對象的值)的訪問函數用 const標明。如下所示是上面類定義中的函數的實現:
Point::Point() { x = 0; y = 0; } void Point::move(double dx, double dy) { x = x + dx; y = y + dy; } double Point::getX() const { return x; }