如果要說C和C++的區別的話,可能可以列出很多方面出來,但是有許多方面的區別是我們學完這兩門語言之后就可以
很好的理解和區分的,比如C是面向過程的一門編程語言,C++雖然主要是以C的基礎發展起來的一門新語言,但它不是
C的替代品,不是C的升級,C++和C是兄弟關系,它可以很好地進行面向對象的程序設計。我要討論的不是這些比較顯
而易見的區別,而是哪些容易被我們所忽略或者混淆的區別。
區別一:重載問題
我用的比較多的IDE是VC6.0,編寫代碼時通常就是建立“Win32 Console Application”,現在向工程中添加test.cpp,
在test.cpp中編寫代碼,代碼如下:
1 #include <stdio.h> 2 3 int Add(int a,int b) 4 { 5 return a+b; 6 } 7 int Add(int a,int b,int c) 8 { 9 return a+b+c; 10 } 11 12 void main() 13 { 14 Add(1,2); 15 Add(1,2,3); 16 return; 17 }
程序編譯通過,並且能夠正常運行。這說明C++程序可以實現重載,重載的條件是:
a.函數名相同,參數的個數不同;
b.函數名相同,參數的個數相同但參數類型不同。
而在test.c中編寫同樣的代碼,編譯時就會出現如下的錯誤提示:

所以可以看出C語言是不支持重載,而C++支持重載。
區別二:C/C++的void參數
在C程序中如果在聲明函數的時候如果沒有任何參數那么需要將參數定義為void以此來限定此函數不可傳遞任何參數,如果不進行限定讓參數表默認為空其意義是可以傳遞任何參數,這個問題的由來實際上是由於要兼容早期的K&C標准造成的。K&C 在聲明函數時參數表為空,也就是說函數聲明時的函數原型簽名信息不包含參數信息,如果要有明確的定義空參數的行為那么就要自己去處理它。
我在test01.c中編寫c代碼,代碼如下:
1 #include <stdio.h> 2 #include <conio.h> 3
3 void SayHello() //是一個可變參數的函數
5 { 6 printf("\nHello World !"); 7 return; 8 } 9 10 void main() 11 { 12 SayHello(1); 13 SayHello(1,2,3); 14 SayHello('a','b'); 15 16 getch(); 17 return; 18 }
代碼編譯通過,並且正常運行。可見C語言中的函數定義時不帶參數並不代表該函數在調用時不能傳參,而是這個函數
將成為一個可變參的函數,調用時可以傳遞不同個數的參數。如果要限制這個函數不能傳參,這需在定義時加void關鍵字,
void SayHello(void)。
再在test02.cpp中編寫代碼,代碼與上面的代碼完全相同,但是在編譯的時候發生了錯誤:

可見在C++語言中,不帶參數的函數在調用時並不是和C語言一樣可以傳遞不同個數的參數,函數不能傳遞任何參數,
此時C++中的 void SayHello()或者void SayHello(void)和C中的void SayHello(void)是一樣的。
參考資料:http://www.cnblogs.com/thinkingfor/archive/2010/09/14/1825842.html
區別三:struct的功能
我們都知道在C和C++代碼中都可以定義結構體struct,然而C語言只能在struct中聲明變量(像int類型,char類型),
但是C++語言不僅可在struct中聲明變量,同時還可以定義函數,優點類似於類的既可以有成員變量又有方法。
我在test_struct.cpp中編寫的代碼如下:
1 #include <stdio.h> 2 #include <conio.h> 3 4 struct People 5 { 6 char *Name; //變量 7 int Age; 8 9 void SayHello(char *name,int age) //函數體 10 { 11 Name=name; 12 Age=age; 13 printf("\n My name is %s,I am %d years old .",name,age); 14 return; 15 } 16 }; 17 18 void main() 19 { 20 People p1; 21 p1.SayHello("Mike",18); 22 23 getch(); 24 return; 25 }
程序編譯通過,並且成功運行,運行結果:

如果在.c文件中添加以上代碼,則在編譯的時候就提示出錯:“函數不能作為結構體struct的成員”

所以可以說C++在struct的使用上是對C做了擴展的了。
