Time of Update: 2018-12-03
8.2 成員函數的重載、覆蓋與隱藏成員函數被重載的特徵:(1)相同的範圍(在同一個類中);(2)函數名字相同;(3)參數不同;(4)virtual 關鍵字可有可無。覆蓋是指衍生類別函數覆蓋基類函數,特徵是:(1)不同的範圍(分別位於衍生類別與基類);(2)函數名字相同;(3)參數相同;(4)基類函數必須有virtual 關鍵字。#include <iostream.h>class Base{public:void f(int x){ cout <<
Time of Update: 2018-12-03
8.3 參數的預設值參數預設值的使用規則:【規則8-3-1】參數預設值只能出現在函數的聲明中,而不能出現在定義體中。例如:void Foo(int x=0, int y=0); // 正確,預設值出現在函數的聲明中void Foo(int x=0, int y=0) // 錯誤,預設值出現在函數的定義體中{⋯} 【規則8-3-2】如果函數有多個參數,參數只能從後向前挨個兒預設,否則將導致函數調用語句怪模怪樣。正確的樣本如下:void Foo(int x, int y=0, int
Time of Update: 2018-12-03
面試例題1:在C++程式中調用被C編譯器編譯後的函數,為什麼要加extern “C”?解答:C++語言支援函數重載,C語言不支援函數重載。函數被C++編譯後在庫中的名字與C語言的不同。假設某個函數的原型為:void foo(int x,int y).該函數被C編譯器編譯後在庫中的名字為_foo,而C++編譯器則會產生像_foo_int_int之類的名字。C++提供了C連結交換制定符號extern
Time of Update: 2018-12-03
轉自:http://shy91123.spaces.live.com/Blog/cns!F7AC68D469427567!113.entry?owner=1C程式員的境界VB程式員的三個境界: (1)所有代碼都只放在表單檔案中的,屬於菜鳥級,他們只會從面板上拖控制項,設定屬性 ,然後再給事件編碼 (2)工程中有BAS模組的,屬於中間級,他們已意識到有大量的代碼是重複出現的,應該 將其抽取出來作為公用模組
Time of Update: 2018-12-03
用MFC的檢測heap的檢測到程式中有記憶體泄露,可是找了半天也沒找到,最後採用逐步排除的方法終於找到了,在使用一個結構的時候出現的堆泄露,結構的初始化我習慣性的用了memset將結構初始為0,可是結構中用了string型的變數,STL的string會自己動態分配,如果用memset會丟失掉已指派的字串緩衝區的記憶體。於是就產生了記憶體泄露。所以使用memset以前,要多注意一下結構中都是什麼變數。否則產生問題之後,找起來很難發現的。
Time of Update: 2018-12-03
拷貝建構函式與運算子的重載 * 多態 - 前堤:繼承,虛函數,指標或引用 - 類型轉換 : dynamic_cast 把父類*轉換成子類* - 純虛函數 : 保證此函數一定不會被執行,抽象類別,不能建立對象. * 友元 - 內部授權,不是成員,這一點很重要,因此也沒有this,與之相關的一切 也沒有. - 打破封裝,必須有一個類的內部聲明,可訪問任何成員通過 對象.來訪 問. * 靜態 - 是成員 - 大家共用一份成員,整個類共用的成員. - 待用資料成員:
Time of Update: 2018-12-03
[liuzy@linux237 testcode]$ vi testhms.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define hdg 30 //時針每轉動一下走30度 4 #define mdg 6//分針每轉動一下走6度 5 #define sdg 6//秒針每轉動一下走6度 6 int gethourdg(int h,int m) 7 {
Time of Update: 2018-12-03
#include <stdio.h>#include <stdlib.h>#include <conio.h>#define X " Sun Mon Tue Wed Thu Fri Sat"#define P printf#define B break#define FP fprintfvoid print(int n){ int i; for(i=0;i<n;i++) printf(" ");}int day(int year){ long a,b;
Time of Update: 2018-12-03
記憶體模型描述的是程式中各變數(執行個體域、靜態域和數組元素)之間的關係,以及在實際電腦系統中將變數儲存到記憶體和從記憶體取出變數這樣的低層細節.不同平台間的處理器架構將直接影響記憶體模型的結構. 首先介紹一下C++中有繼承關係的類對象記憶體的布局: 在C++中,如果類中有虛函數,那麼它就會有一個虛函數表的指標__vfptr,在類對象最開始的記憶體資料中。之後是類中的成員變數的記憶體資料。 對於子類,最開始的記憶體資料記錄著父類對象的拷貝(包括父類虛函數表指標和成員變數)。之後是子類自己的
Time of Update: 2018-12-03
問題:如題。假設有父類A與子類BA執行個體化一個對象a B執行個體化一個對象b那麼在記憶體中 a與b的地址關係是什麼。是他們的首地址都一樣嗎?解答:他們是沒有必然關係的。就跟你隨便產生另外兩個其他類型的變數一樣。當然,你執行個體化的對象b跟A有關係。b對象開頭的部分4個位元組是虛函數表,接著就是基類的資料成員,然後是子類的資料成員。 對方:C++中的類對象執行個體化後存在記憶體中的什麼位置,堆還是棧?我(思索,但不確定):
Time of Update: 2018-12-03
一、C++中不能使用random()函數 random函數不是ANSI C標準,不能在gcc,vc等編譯器下編譯通過。 可改用C++下的rand函數來實現。 1、C++標準函數庫提供一隨機數產生器rand,返回0-RAND_MAX之間均勻分布的偽隨機整數。 RAND_MAX必須至少為32767。rand()函數不接受參數,預設以1為種子(即起始值)。 隨機數產生器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。(但這樣便於程式調試)
Time of Update: 2018-12-03
C語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。結構體到底怎樣對齊?下面總結了對齊原則,在沒有#pragma pack宏的情況下:原則1、普通資料成員對齊規則:第一個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始(比如int在32位機為4位元組,則要從4的整數倍地址開始儲存)。原則2、結構體成員對齊規則:如果一個結構裡有某些結構體成員,則該結構體成員要從其內部最大元素大小的整數倍地址開始儲存。(struct a裡存有struct
Time of Update: 2018-12-03
make編譯時間出現錯誤, 會提示哪一行。可惜vc中不能顯示行號,很是鬱悶。這個外掛程式可以顯示行號,呵呵,很有用。VC顯示行號外掛程式說明---------------------------------------1. 如果你的VC安裝在C盤,請拷貝檔案VC6LineNumberAddin.dll到如下目錄:C:/Program Files/Microsoft Visual Studio/Common/MSDev98/AddIns2.
Time of Update: 2018-12-03
1. 基本解釋 typedef為C語言的關鍵字,作用是為一種資料類型定義一個新名字。這裡的資料類型包括內部資料類型(int,char等)和自訂的資料類型(struct等)。 在編程中使用typedef目的一般有兩個,一個是給變數一個易記且意義明確的新名字,另一個是簡化一些比較複雜的型別宣告。 至於typedef有什麼微妙之處,請你接著看下面對幾個問題的具體闡述。 1、typedef的最簡單使用 typedef long
Time of Update: 2018-12-03
原貼最初發表在QQ空間: http://user.qzone.qq.com/31731705/blog/1310540087 上個月面試了一些快要畢業在找工作的學生,有個奇怪的感覺,學校就是學校,搞的東西大多是理論或者演算法方面的,聽的我是雲裡霧裡,還有就是很NB很酷的那種,動不動就是核心,驅動,有分析Linux核心源碼的,有做Windows核心驅動的。還記得當時我問一個學生,為什麼你看的是Linux
Time of Update: 2018-12-03
原貼最初發表在QQ空間:普通C++程式員 VS 文藝C++程式員,http://user.qzone.qq.com/31731705/blog/1323153107 BBS上看到一個講C++的文章, C++ 這孩子 是不是誤入歧途了?,讓我想起了普通青年和文藝青年。 看這個經典的NB程式,求一個數有多少bit。J普通C++程式員namespace traditional { int bits_of(int remain) { if (remain) return 1+bits_of(
Time of Update: 2018-12-03
<深度探索C++物件模型>>(簡體版)中的蛇足(沒有此書的人請勿看)上次見到這本書是一年前(是候先生的繁體版),花了一個星期的時間讀完,囫圇吞棗,不求甚解,饒是如此,也解決了我在C++方面的諸多疑惑,這次終於看到了簡體版,同樣花了一個星期,或許真的是一回生,兩回熟吧(也可能是對簡體文字的親切感^_^),思考問題的同時也發現了一些問題,一愚之見,不吐不快。蛇足之一,P84,class X {};class Y : public virtual X {};class Z :
Time of Update: 2018-12-03
最初發表在QQ空間,見:C++代碼的維護,從執行個體說起小問題有大智慧-Proxy 伺服器的監測 是幾個月前的文章,最近碰到別人問如何設定代理的問題,又回顧了部分代碼,雖然時間不長,還是有不少記不清了。,於是就整理了那個設定代理的函數,代碼是實踐的科學,每寫一次,都會有點心得。先把代碼貼出來,這個函數的大概流程是,先查詢當前的瀏覽器設定,然後根據使用者的設定,再決定1. 無代理 2. 使用自動設定指令碼 3. 使用某個代理
Time of Update: 2018-12-03
最初發表在QQ空間:標準C++中實現線程類 標準C++和標準庫中沒有對線程的封裝,程式員們不得不使用OS提供的API來處理線程,OS層級的API通常基於C,能用,但並不方便。最近看到論壇上有人問,順便和同事討論這個問題,如何使用標準C++封裝線程的操作,目的就是simple and easy to use。想想自己似乎多年前(已經結蜘蛛網了)寫過這方面的代碼,找了找,還真找到了,是Windows平台的,整理一下,與大家分享。// 抽象類別,作為線程類的基類,定義了幾個介面//
Time of Update: 2018-12-03
原貼最初發在QQ空間:C S D