程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++基礎-001,基礎-001

C/C++基礎-001,基礎-001

編輯:C++入門知識

C/C++基礎-001,基礎-001


1.C++虛函數的工作原理

  虛函數(virtual function)需要虛函數表(virtual table)才能實現。如果一個類有函數聲明成虛擬的,就會生成一個虛函數表,存放這個類的虛函數地址。若子類沒有覆寫虛函數,該子類的虛函數表就會存放父類的函數地址。調用這個虛函數時,就會通過虛函數表解析函數的地址。在C++中,動態綁定(dynamic bindding)就是通過虛函數表機制實現的。

2.深拷貝和淺拷貝的區別

  淺拷貝會將對象所有成員的值拷貝到另一個對象裡。使用淺拷貝時,必須非常小心,只有當我們知道自己在做什麼時才可選用淺拷貝。多數情況下,使用淺拷貝是為了傳遞一塊復雜結構的信息,但又不想真的復制一份數據。使用淺拷貝時,銷毀對象也必須非常小心。

  深拷貝除了拷貝所有成員的值,還會進一步拷貝所有的指針對象。

  在實際開發中,淺拷貝很少使用。大部分情況都應該使用深拷貝,特別是當需要拷貝的結構很小時。

 1 struct Test
 2 {
 3      char * ptr; 
 4 };
 5 
 6 void shallowCopy(Test & src , Test & dest)
 7 {
 8    dest.ptr =  src.ptr;  
 9 }
10 
11 void deepCopy(Test & src , Test & dest)
12 {
13     dest.ptr = (char * )  malloc(strlen(src.ptr) + 1 );
14     strcpy(dest.ptr , src.ptr);  
15 }

3.C語言的關鍵字“volatile”的作用

  關鍵字volatile的作用是指示編譯器,即使代碼不對變量做任何改動,該變量的值仍可能會被外界修改。操作系統、硬件或其他線程都有可能修改該變量。該變量的值有可能遭受意料之外的修改。所以,每次使用時,編譯器都會重新從內存中獲取這個值。

  volatile的整數聲明語句:

1 int volatile x;
2 volatile int x;

  聲明指向volatile整數的指針:

volatile int *  x;
int volatile *  x;

  指向非volatile數據的volatile指針很少見,但也是可行的:

int * volatile x;

  如果聲明指向一塊volatile內存的volatile指針變量(指針本身與地址所指向的內存都是volatile),volatile變量不會被優化掉。

int volatile * volatile x;

  volatile變量在多線程程序裡很有用,對於全局變量,任意線程都可能修改這些共享的變量。我們可能不希望編譯器對這些變量進行優化,我們就可以使用volatile關鍵字。

4.C++基類的析構函數聲明為virtual的原因

  確保正確調用繼承關系最末端的子類的析構函數。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved