歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 深入理解C++語言--從本質上理解C與C++

深入理解C++語言--從本質上理解C與C++

日期:2017/3/1 10:31:06   编辑:Linux編程
如果說任何事物都可以抽象為一種數據結構,這個數據結構肯定要有我們想操作的對象--該事物本身(它包括各種屬性、要素),定義為數據;而這個事物本身(數據)肯定能進行各種各樣的操作,如整數能+-*/%等,開關有開、關等操作,這各種各樣的操作即為運算;既然是運算可定有運算規則,如浮點數就不能進行取余運算,開關不能吃等;總結起來:


個人認為,C語言可以說是以數值型數據結構
(如void,char,int,float)為基礎,抽象出來的語言;它的任何操作都都被局限於數值型數據結構這一層面上了,即使有構造類型struct可以定義些復雜類型,但是它還是需要人工進行顯式地賦值(詳細見下面說明),可以說構造類型struct可以上C語言擁有面向對象的思想,但是實現不了真正的面向對象,同時也可以理解為什麼被稱為面向過程的了。因此可以看出C語言中各種操作都是圍繞變量函數,變量是如下類型的數值型數據結構,而函數是針對這些變量的數值型運算


利用struct構造類型已經初步具有面向對象的思想了(如Linux內核完全使用C語言編寫,但是使用了很多面向對象的思想),但是它仍然局限於數值型數據結構這一層面上,因為構造類型struct中成員函數不能直接定義,仍需利用指針,然後對於指針進行函數地址的賦值(數值的賦值),並且C定義的struct構造類型不能實現封裝、隱藏,所有數據都是人工顯式執行的,見下面實例分析。

例如,定義一個new_type的數據結構,包含了a,b兩個操作數(數據),還有一個對於這兩操作數的運算add。

[cpp]
  1. struct new_type{
  2. int a;
  3. int b;
  4. int (*add)(int a, int b);
  5. };
  6. int f_add(int a, intb)
  7. {
  8. return a+b;
  9. }
  10. struct new_type test;
  11. test.add=f_add; //1。可以看出是基於數值型數據結構層面的賦值
  12. test->add(test.a, test.b); //2。所有數據都是顯式地調用執行的
見上,即使有struct構造類型可以定義些復雜類型,但是它還是需要人工進行顯式地賦值(如1);而且它還要在其他函數中顯式地調用,不能實現封裝、隱藏(如2)。


class與struct之間的區別


Copyright © Linux教程網 All Rights Reserved