Time of Update: 2017-01-19
三種存取權限public:可以被任意實體訪問protected:只允許子類及本類的成員函數訪問private:只允許本類的成員函數訪問三種繼承方式public 繼承protect 繼承private 繼承組合結果基類中 繼承方式 子類中public & public繼承 => publicpublic & protected繼承 => protectedpublic & private繼承 = > privateprotected & public繼承 =>
Time of Update: 2017-01-19
C語言exp()函數:e的次冪函數(以e為底的x次方值)標頭檔:#include <math.h>exp()用來計算以e 為底的x 次方值,即ex 值,然後將結果返回。其原型為: double exp(double x);【傳回值】返回 e 的x 次方計算結果。注意,使用 GCC 編譯時間請加入-lm。【執行個體】計算e的10次方的值。#include <math.h>main(){ double answer; answer = exp (10);
Time of Update: 2017-01-19
C語言abs()函數:求絕對值(整數)標頭檔:#include <stdlib.h>定義函數:int abs (int j);函數說明:abs()用來計算參數j 的絕對值,然後將結果返回。傳回值:返回參數j 的絕對值結果。範例#ingclude <stdlib.h>main(){ int ansert; answer = abs(-12); printf("|-12| = %d\n", answer);}執行|-12| =
Time of Update: 2017-01-19
C語言log()函數:返回以e為底的對數值標頭檔:#include <math.h>log() 函數返回以 e 為底的對數值,其原型為: double log (double x);log()用來計算以e為底的 x 的對數值,然後將結果返回。設傳回值為 ret,則x = eret如果 x 為負數或 0,則會發生錯誤並設定 errno 值。錯誤碼:EDOM:參數x 為負數;ERANGE:參數x 為零值,零的對數值無定義。注意:使用 GCC
Time of Update: 2017-01-19
C語言pow()函數:求x的y次方(次冪)標頭檔:#include <math.h>pow() 函數用來求 x 的 y 次冪(次方),其原型為: double pow(double x, double y);pow()用來計算以x 為底的 y 次方值,然後將結果返回。設傳回值為 ret,則 ret = xy。可能導致錯誤的情況: 如果底數 x 為負數並且指數 y 不是整數,將會導致 domain error 錯誤。 如果底數 x 和指數 y 都是 0,可能會導致 domain
Time of Update: 2017-01-19
一. “#if 0/ #if 1 ... #endif” 的作用1) code中定義的是一些調試版本的代碼,此時code完全被編譯器忽略。如果想讓code生效,只需把#if 0改成#if 12) #if 0還有一個重要的用途就是用來當成注釋,如果你想要注釋的程式很長,這個時候#if 0是最好的,保證不會犯錯誤 #if 1可以讓其間的變數成為局部變數。3)
Time of Update: 2017-01-19
指標儲存了記憶體的地址,同時指標是有類型的,如int*,float*,那麼,一個自然的猜想就是指標變數應該儲存這兩方面的資訊:地址和指標類型,比如,就像下面的結構體:複製代碼 代碼如下:struct pointer{ long address; int
Time of Update: 2017-01-19
在Windows平台對檔案進行存取操作可選的方案有很多,如果採用純C,則需要用到File*等,當然也可以直接調用Windows API來做;如果採用C++,首先想到的就是檔案流fstream。雖然在COM層面上,我們還可以使用IStream來實現檔案的讀寫,其效率也非常高。不過本文僅對C++流操作做簡單的探討,相比於Windows API或IStream,C++的流操作通用性更好一些,因為你能輕鬆將代碼移植到其它平台上。
Time of Update: 2017-01-19
複製代碼 代碼如下://通過不同的方法,實現對所輸入字串的反轉,可以很好地複習鞏固 C++ 基礎知識/*分析過程: 假設要使傳遞的字串為常量const字串,這樣操作更加靈活,可直接傳遞字串字面值進行反轉,常見的解決方案就是,定義一個新的與傳遞過來字串長度 相等的字元數組,然後進行字串拷貝,把str字元按從左至右放置到字元數組中,然後採用迴圈來對字元數組中字元反轉*//*第一種,採用以上思路解法,傳遞為const類型C風格字元指標,返回為char*類型*///直接使用字元數組賦值char*
Time of Update: 2017-01-19
眾多C++書籍都忠告我們C語言宏是萬惡之首,但事情總不如我們想象的那麼壞,就如同goto一樣。宏有一個很大的作用,就是自動為我們產生代碼。如果說模板可以為我們產生各種型別的代碼(型別替換),那麼宏其實可以為我們在符號上產生新的代碼(即符號替換、增加)。關於宏的一些文法問題,可以在google上找到。相信我,你對於宏的瞭解絕對沒你想象的那麼多。如果你還不知道#和##,也不知道prescan,那麼你肯定對宏的瞭解不夠。我稍微講解下宏的一些文法問題(說文法問題似乎不妥,macro只與preproces
Time of Update: 2017-01-19
1)auto這個關鍵字用於聲明變數的生存期為自動,即將不在任何類、結構、枚舉、聯合和函數中定義的變數視為全域變數,而在函數中定義的變數視為局部變數。這個關鍵字不怎麼多寫,因為所有的變數預設就是auto的。 (2)register這個關鍵字命令編譯器儘可能的將變數存在CPU內部寄存器中而不是通過記憶體定址訪問以提高效率。
Time of Update: 2017-01-19
const和volatile放在一起的意義在於:(1)本程式段中不能對a作修改,任何修改都是非法的,或者至少是粗心,編譯器應該報錯,防止這種粗心;(2)另一個程式段則完全有可能修改,因此編譯器最好不要做太激進的最佳化。“const”含義是“請做為常量使用”,而並非“放心吧,那肯定是個常量”。“volatile”的含義是“請不要做沒譜的最佳化,這個值可能變掉的”,而並非“你可以修改這個值”。因此,它們本來就不是矛盾的。const修飾的變數不允許這裡修改不代表不允許別處修改,比如:複製代碼
Time of Update: 2017-01-19
如果要想使一個catch block能抓獲多種資料類型的異常對象的話,怎麼辦?C++標準中定義了一種特殊的catch用法,那就是” catch(…)”。 感性認識1、catch(…)到底是一個什麼樣的東東,先來個感性認識吧!看例子先:複製代碼 代碼如下: int main() { try { cout << "在 try block 中, 準備拋出一個異常." << endl; //這裡拋出一個異常(其中異常對象的資料類型是int,值為1) throw 1; }
Time of Update: 2017-01-19
學習C++新手通常會對指標的使用比較頭疼,其實指標的概念很簡單,只要能悟清楚這樣一個簡單的道理就能對指標有一定的認識了: 例如 int *a = new int[10]; 一維指標其實就相當於一維數組,不用去看書上所說的數組在記憶體中的首地址這些晦澀的話,以此類推 二維指標就相當於二維數組,新手對一維數組的開闢與釋放比較容易熟悉,例如上面的a 釋放就是 delete []a; a = NULL; 注意a = NULL;
Time of Update: 2017-01-19
getchar 是stdio.h中的庫函數,它的作用是從stdin流中讀入一個字元,也就是說 ,如果stdin有資料的話不用輸入就可以直接讀取了。而getch()和getche()是conio.h中的庫函數,它的作用是從鍵盤接收字元。getch()
Time of Update: 2017-01-19
可變參數即表示參數個數可以變化,可多可少,也表示參數的類型也可以變化,可以是int,double還可以是char*,類,結構體等等。可變參數是實現printf(),sprintf()等函數的關鍵之處,也可以用可變參數來對任意數量的資料進行求和,求平均值帶來方便(不然就用數組或每種寫個重載)。在C#中有專門的關鍵字parame,但在C,C++並沒有類似的文法,不過幸好提供這方面的處理函數,本文將重點介紹如何使用這些函數。 第一步 可變參數表示用三個點…來表示,查看printf()函數和scanf(
Time of Update: 2017-01-19
C/C++變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫一個測試程式:複製代碼 代碼如下:#include <stdio.h> #include <malloc.h> int g_i = 100; int g_j = 200; int g_k, g_h; int main() { const int
Time of Update: 2017-01-19
HashTable是在實際應用中很重要的一個結構,下面討論一個簡單的實現,雖然簡單,但是該有的部分都還是有的。 一,提供者 建立一個hashtable. hashtable hashtable_new(int size) /其中size表示包含的接點個數。存入key-value至hashtable中。 void hashtable_put(hashtable h,const char* key,void *val); 根據key從hashtable中取出value值。 void *
Time of Update: 2017-01-19
C++的“繼承”特性可以提高程式的可複用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”。我們要給“繼承”立一些使用規則:一、如果類A 和類B 毫不相關,不可以為了使B 的功能更多些而讓B 繼承A 的功能。不要覺得“不吃白不吃”,讓一個好端端的健壯青年無緣無故地吃人蔘補身體。二、如果類B 有必要使用A 的功能,則要分兩種情況考慮:(1)若在邏輯上B 是A 的“一種”(a kind of ),則允許B 繼承A
Time of Update: 2017-01-19
在以下三種情況下需要使用初始化成員列表:一,需要初始化的資料成員是對象的情況;二,需要初始化const修飾的類成員;三,需要初始化引用成員資料;原因:C++可以定義參考型別的成員變數,參考型別的成員變數必須在建構函式的初始化列表中進行初始化。對於類成員是const修飾,或是參考型別的情況,是不允許賦值操作的,(顯然嘛,const就是防止被錯誤賦值的,參考型別必須定義賦值在一起),因此只能用初始化列表對齊進行初始化。成員類型是沒有預設建構函式的類。若沒有提供顯示初始化式,則編譯器隱式使用成員類型的