原创 【008】動態數組

int a[20]; int *x = a; 指針變量x指向數組a的地址,a[0]和*x都取代數組的第一個元素。 a[1]等價於*(x+1) a[2]等價於*(x+2) 把一個數組聲明傳遞給new語句,使它返回一個該數組

原创 VS2013 C++ 關閉安全檢查

vs2013中:(報錯信息) 錯誤 8 error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead.

原创 【SF001】 二分查找

二分査找也稱折半査找,其優點是查找速度快,缺點是要求所要査找的數據必須是有序序列。該算法的基本思想是將所要査找的序列的中間位置的數據與所要査找的元素進行比較,如果相等,則表示査找成功,否則將以該位置爲基準將所要査找的序列分爲左右兩部分。

原创 C++多態的實現原理

1. 用virtual關鍵字申明的函數叫做虛函數,虛函數肯定是類的成員函數。2. 存在虛函數的類都有一個一維的虛函數表叫做虛表。類的對象有一個指向虛表開始的虛指針。虛表是和類對應的,虛表指針是和對象對應的。3. 多態性是一個接口多種實現,

原创 【007】動態內存管理

靜態內存: 變量(包括指針變量)、固定長度的數組、某給定的對象。 可以在代碼中通過它們的名字或者地址來訪問和使用它們。 動態內存: 由一些沒有名字、只有地址的內存塊構成,那些內存塊是在程序運行期間動態分配的。 如果沒有足

原创 【012】命名空間和模塊化編程

命名空間和模塊化編程 接下來我們將重點討論兩個相互關聯的簡單概念:   第一個概念是模塊化(modularization) 把程序劃分成多個組成部分(即所謂的“模塊”) 這是通過把程序代碼分散到多個文件裏,等編譯程序時再把那些

原创 【005】抽象方法,即“純虛函數”

抽象方法(abstract method,也可以稱爲純虛函數)是面向對象編程技術的另一個核心概念,在設計一個多層次的類的繼承關係時常會用到。   把某個方法聲明爲一個抽象方法等於告訴編譯器這個方法必不可少,但我現在(在這個基類裏)還不能爲

原创 【010】高級強制類型轉換

要點總結   我們用傳統的強制類型轉換實現:把所需要的指針類型放在一對圓括號之間,然後寫出將被強制轉換的地址值。 Company *company = new Company(“APPLE”, “Iphone”); TechCo

原创 【009】副本構造器

地球人都知道,我們可以把一個對象賦值給一個類型與之相同的變量。 編譯器將生成必要的代碼把”源”對象各屬性的值分別賦值給”目標”對象的對應成員。這種賦值行爲稱之爲逐位複製(bitwise coyp)。 這種行爲在絕大多數場合都沒有問題

原创 C++內存分配方式詳解——堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區

棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區。裏面的變量通常是局部變量、函數參數等。在一個進程中,位於用戶虛擬地址空間頂部的是用戶棧,編譯器用它來實現函數的調用。和堆一樣,用戶棧在程序執行期間可以動態地擴展

原创 【006】運算符重載

所謂重載,就是重新賦予新的含義。函數重載是對一個已有的函數賦予新的含義,使之實現新功能。   其實運算符也可以重載。   運算符重載的方法是定義一個重載運算符的函數,在需要執行被重載的運算符時,系統自動調用該函數,以實現相應的運算。  

原创 c++成員函數的重載、覆蓋、隱藏區別

成員函數的重載、覆蓋(override)與隱藏很容易混淆,C++程序員必須要搞清楚概念,否則錯誤將防不勝防。 重載與覆蓋 成員函數被重載的特徵: (1)相同的範圍(在同一個類中); (2)函數名字相同; (3)參數不同

原创 【003】繼承 構造器 析構器

  在c++繼承體系中,創建一個對象後: 1、對於構造器:先進 父類 後 子類。 2、對於析構器:先進 子類 後 父類。 代碼演示: #include <iostream> #include <string> class BaseC

原创 【004】虛方法

使用指向對象的指針:先認識下new和delete:int *point = new int;//定義一個指向整型的指針,用new創建一個整型的指針*pointer =110;std::cout<<*pointer;delete point