Time of Update: 2017-01-18
主要從三個方面來講: 1 單一繼承 2 多重繼承 3 虛擬繼承1 單一繼承(1)衍生類別完全擁有基類的記憶體布局,並保證其完整性。衍生類別可以看作是完整的基類的Object再加上衍生類別自己的Object。如果基類中沒有虛成員函數,那麼衍生類別與具有相同功能的非衍生類別將不帶來任何效能上的差異。另外,一定要保證基類的完整性。實際記憶體布局由編譯器自己決定,VS裡,把虛指標放在最前邊,接著是基類的Object,最後是衍生類別自己的object。舉個栗子:class A{ int b;
Time of Update: 2017-01-18
位域的定義有些資訊在儲存時,並不需要佔用一個完整的位元組, 而只需占幾個或一個二進位位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省儲存空間,並使處理簡便,C語言又提供了一種資料結構,稱為“位域”或“位段”。所謂“位域”是把一個位元組中的二進位劃分為幾個不同的地區,並說明每個地區的位元。每個域有一個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以把幾
Time of Update: 2017-01-18
前言可能許多人對直接用C語言繪圖仍然停留在Turbo C的graphics.h年代,或許也有教育老化的原因,畢竟曾經的經典早已成往事,與其想盡各種辦法尋找與其相容的圖形庫,不如順勢擁抱燦爛的明天。Cario(http://cairographics.org/)是一個非常出色的2D圖形庫,著名的GTK+3.0完全採用Cario作為繪圖引擎,由此可見它的強大和吸引力。Cario支援X
Time of Update: 2017-01-18
1 教科書裡的單例模式我們都很清楚一個簡單的單例模式該怎樣去實現:建構函式聲明為private或protect防止被外部函數執行個體化,內部儲存一個private static的類指標儲存唯一的執行個體,執行個體的動作由一個public的類方法代勞,該方法也返回單例類唯一的執行個體。上代碼: class singleton{protected: singleton(){}private: static singleton* p;public: static singleton*
Time of Update: 2017-01-18
先看一個最簡單的教科書式單例模式:class CSingleton{public:static CSingleton* getInstance(){if (NULL == ps){//tag1ps = new CSingleton;}return ps;}private:CSingleton(){}CSingleton & operator=(const CSingleton &s);static CSingleton* ps;};CSingleton* CSingleton::ps =
Time of Update: 2017-01-18
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鏈表。由於雙向鏈表可以方便地實現正序和逆序兩個方向的插入、尋找等功能,在很多演算法中經常被使用,這裡用C++構造了一個雙向鏈表,提供了對雙向鏈表的插入、尋找、刪除節點、排序等功能,其中排序提供了插入排序和冒泡排序兩種方式#include<iostream>using namespace
Time of Update: 2017-01-18
1.概念雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鏈表。結構圖如下所示: 2.基本操作執行個體DoubleList.cpp#include "stdafx.h"#include "DoubleList.h"#include <stdio.h>#include <malloc.h>#include
Time of Update: 2017-01-18
任務隊列是指能夠實現任務在多線程間安全傳遞的先入先出的隊列。任務是指組合了資料和操作的對象,這裡面定義為CTask類的對象。任務的實現:Task.cpp#include "stdafx.h"#include "Task.h"#include <iostream>using namespace std;CTask::CTask(int* nCount){ m_nCount = nCount;}CTask::~CTask(){}void CTask::DoWork(){
Time of Update: 2017-01-18
單例模式(Singleton),保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。其構造過程由自身完成,可以將構造方法定義為private型的,這樣外界就只能通過定義的靜態函數Instance()構造執行個體,這個函數的目的就是返回一個類的執行個體,在此方法中去做是否有執行個體化的判斷。用戶端不再考慮是否需要去執行個體化的問題,把這些都交給了單例類自身。通常我們可以讓一個全域變數使得一個對象被訪問,但它不能防止你執行個體化多個對象。一個最好的辦法,就是讓類自身負責儲存它的唯一執行個體。這
Time of Update: 2017-01-18
前言最近在工作中遇到一個問題,為了跨平台在.net
Time of Update: 2017-01-18
控制台列印一個聖誕樹:簡簡單單的C語言知識,真的很基礎,小白也能看得懂哦/*******************************聖誕樹byC語言小白入門*******************************/#include<stdio.h>#include <stdlib.h>#include <time.h>#include<Windows.h>#define X 25 //畫面長度int background[20][2 *
Time of Update: 2017-01-18
快到聖誕節啦,男票女票都有了嘛?沒有的話,有沒有喜歡的女孩子或者男孩子啊?今天就給你們分享一個聖誕節的表白程式,希望你們喜歡咯,效果是這樣的:聖誕節快到了,讓我們用C語言製作一個聖誕表白程式具體代碼如下咯:// GreetingCardDemoDlg.cpp : 實現檔案//#include "stdafx.h"#include "GreetingCardDemo.h"#include "GreetingCardDemoDlg.h"#include "afxdialogex.h"#ifdef _
Time of Update: 2017-01-18
因工作需要,經常跟時間戳記打交道,但是因為它僅僅是一個數字,我們很難直接看出它有什麼意義,或兩個時間戳記之間究竟差了多長的間隔。於是從MSDN for Visual Studio6上找到了時間戳記轉換成日期時間的演算法。本文除介紹這一演算法外,還提供一個範例程式碼。1、將時間戳記轉換成一串32位元的位元。有些數字轉換之後不夠32位,則在前面補充0。這可通過windows內建的計算機完成。比如481522543轉換成0001 1100 1011 0011 0111 0011 0110 11112、
Time of Update: 2017-01-18
演算法介紹迪傑斯特拉演算法是由荷蘭電腦科學家狄克斯特拉於1959
Time of Update: 2017-01-18
C++ Qt屬性系統詳細介紹Qt提供了一個絕妙的屬性系統。跟那些由編譯器提供的屬性差不多。然而,作為一個獨立於編譯器和平台的庫,Qt不依賴於非標準的編譯特性,比如__property 或[property]。Qt可以在任何平台上的標準編譯器下編譯。Qt屬性系統基於中繼資料對象系統--就是那個提供了對象內建訊號和槽通訊機制的傢伙。聲明屬性需要什麼要聲明一個屬性,需在繼承自QObject的類中使用Q_PROPERTY()宏。Q_PROPERTY(type name READ
Time of Update: 2017-01-18
前言關於VS Code在Linux下的安裝這裡就不提了,不管是CentOS還是Ubuntu,如果不懂且搜問題足夠的情況下,你會解決的。一、前置知識——gcc/g++的編譯連結過程在Windows下,如果你用Visual Studio進行開發,C/C++的編譯器一般採用微軟提供的MSBuild;在Linux下C/C++的編譯器大多採用gcc/g++。既然要在Linux下進行C++開發,很有必要瞭解一下g++編譯器的一些基本知識。假設我現在有一個最簡單的C++檔案: #include
Time of Update: 2017-01-18
前言C語言返回字串函數共有四種方式,分別如下: 使用堆空間,返回申請的堆地址,注意釋放 函數參數傳遞指標,返回該指標 返回函數內定義的靜態變數(共用) 返回全域變數
Time of Update: 2017-01-18
前言使用標準C++的類型轉換符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cast,字面上理解就是去const屬性。 static_cast,命名上理解是靜態類型轉換。如int轉換成char。 dynamic_cast,命名上理解是動態類型轉換。如子類和父類之間的多態類型轉換。
Time of Update: 2017-01-18
C++ STL list 遍曆刪除崩潰錯誤用法一下面這種用法會在for的地方崩潰,分析 第一次for迴圈的時候 it=0,當t.erase(it)執行完成之後 it就變成了 -17891602表明it不能再作為迭代器進行運算,自然會報錯。#include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc,
Time of Update: 2017-01-18
一、問題描述子串應該比較好理解,至於什麼是子序列,這裡給出一個例子:有兩個母串cnblogsbelong比如序列bo, bg, lg在母串cnblogs與belong中都出現過並且出現順序與母串保持一致,我們將其稱為公用子序列。最長公用子序列(Longest Common Subsequence, LCS),顧名思義,是指在所有的子序列中最長的那一個。子串是要求更嚴格的一種子序列,要求在母串中連續地出現。在上述例子的中,最長公用子序列為blog(cnblogs,