Time of Update: 2017-01-18
在c++中,當一個類含有虛函數的時候,類就具有了多態性。建構函式的一項重要功能就是初始化vptr指標,這是保證多態性的關鍵步驟。建構函式初始化vptr指標下面是c++源碼:class X {private: int i;public: X(int ii) { i = ii; } virtual void set(int ii) {//虛函數 i = ii; }};int main() { X x(1);}下面是對應的main函數彙編碼:_main PROC; 16 :
Time of Update: 2017-01-18
朋友面試的一道面試題,分享給大家,面試官經常會問到的,實現string類的四大基本函數必掌握。一個C++類一般至少有四大函數,即建構函式、拷貝建構函式、解構函式和賦值函數,一般系統都會預設。但是往往系統預設的並不是我們所期望的,為此我們就有必要自己創造他們。在創造之前必須瞭解他們的作用和意義,做到有的放矢才能寫出有效函數。 #include <iostream> class CString { friend std::ostream & operator<<(std:
Time of Update: 2017-01-18
C語言實現字元轉unix時間戳記,需要先轉成tm類型,再得到它的Unix時間戳記。附上實現代碼:#include <stdio.h>#include <time.h>int strtotime(char datetime[]){struct tm tm_time;int unixtime;strptime(datetime, "%Y-%m-%d %H:%M:%S", &tm_time);unixtime = mktime(&tm_time);return
Time of Update: 2017-01-18
淺談時間戳記與日期時間互轉C語言/* * ctime.h * * Created on: May 19, 2016 * */ #ifndef CTIME_H_#define CTIME_H_#include "common/micro_type.h"#define OFFSET_SECOND 946684800 /* ��1970/1/1/0/0/0��2000/1/1/0/0/0֮��
Time of Update: 2017-01-18
在學習c++的過程中,也曾經學習java,就發現java有類的嵌套,而看的c++的書,從來沒有哪個講c++的類可以嵌套,於是就試了一下,看是否c++可以嵌套類(編譯環境vc++6.0)於是有了下面的代碼:#include <iostream>using namespace std;class A{public: A(){ cout<<"this a"<<endl; } ~A(){cout<<"a dead"<<endl;}
Time of Update: 2017-01-18
本文執行個體為大家分享了簡單實現C++複數計算機的具體代碼,供大家參考,具體內容如下1.有關計算機的功能 A,實現多個複數(包括實數)的加減乘除,大小比較, B.實現十進位實數的進位轉換,可以轉換任意進位 2.有關設計的原理 A.複數計算的部分,採用運算子的重載,進行複數的加減乘除以及大小比較 對於輸入輸出,(>>和<<),加減乘除運算進行重載。 輸入的重載,實現a+bi形式的複數的輸入。
Time of Update: 2017-01-18
引言MariaDB 是一款灰常不錯開來源資料庫. 這裡直接用它來解決業務問題.業務需求:現在資料庫中表示按照天分表的. 突然我們需要按照月來處理資料.例如輸入一個玩家id, 尋找這個玩家這個月內看了一件事幾次. 我們先搭建一個環境.作業系統:Linux version 4.4.0-22-generic (buildd@lgw01-41)(gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #40-Ubuntu SMP Thu May 12
Time of Update: 2017-01-18
1. 概述簡單地說,每一個含有虛函數(無論是其本身的,還是繼承而來的)的類都至少有一個與之對應的虛函數表,其中存放著該類所有的虛函數對應的函數指標。例:其中:B的虛函數表中存放著B::foo和B::bar兩個函數指標。D的虛函數表中存放的既有繼承自B的虛函數B::foo,又有重寫(override)了基類虛函數B::bar的D::bar,還有新增的虛函數D::quz。提示:為了描述方便,本文在探討對象記憶體布局時,將忽略記憶體對齊對布局的影響。2.
Time of Update: 2017-01-18
當開發外掛程式的時候需要用到反射,在用戶端動態載入遍曆程式集,並調用每個程式集的方法。建立一個控制台應用程式,首先設計一個介面:public interface ISay { void SaySth(); } 在控制台應用程式下建立Plugins檔案夾,控制台的可執行檔和所有組件檔都產生在這裡。右鍵控制台項目--"屬性"--"產生",把"輸出路徑"設定成Plugins檔案夾。建立類庫項目Assembly1,添加對控制台項目的引用,並建立實現ISay介面的類:namespace
Time of Update: 2017-01-18
一、重載(overload)指函數名相同,但是它的參數表列個數或順序,類型不同。但是不能靠傳回型別來判斷。(1)相同的範圍(在同一個範圍中) ;(2)函數名字相同;(3)參數不同;(4)virtual 關鍵字可有可無。(5)傳回值可以不同;二、重寫(也稱為覆蓋 override)是指衍生類別重新定義基類的虛函數,特徵是:(1)不在同一個範圍(分別位於衍生類別與基類) ;(2)函數名字相同;(3)參數相同;(4)基類函數必須有 virtual 關鍵字,不能有 static
Time of Update: 2017-01-18
STL提供六大組件,彼此可以組合套用1、容器(containers):各種資料結構,如vertor,list,deque,set,map.從實現的角度來看,STL容器是一種class template2、演算法(algorithms):各種演算法如sort,search,copy,earse。STL演算法是一種 function
Time of Update: 2017-01-18
fork的意義下圖為,C 程式的儲存空間布局(典型)1.一個現有進程可以調用 fork 函數建立一個新進程。2.fork 函數被調用一次,但返回兩次, 兩次返回的唯一區別是子進程的傳回值是 0, 而父進程的傳回值是新子進程的 PID。3.子進程和父進程繼續執行 fork 調用之後的指令。在上圖的儲存空間布局中,父子進程只共用本文段,其餘的都各自有獨立的副本 (通常使用 copy-on-write 的策略,速度比較快)。fork 的兩種用法1.父子進程同時執行不同的程式碼片段典型應用:Web
Time of Update: 2017-01-18
1、堆排序定義n個關鍵字序列Kl,K2,…,Kn稱為堆,若且唯若該序列滿足如下性質(簡稱為堆性質):(1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤
Time of Update: 2017-01-18
N皇后問題問題描述:在n×n格的棋盤上放置彼此不受攻擊的n個皇后。按照國際象棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於再n×n的棋盤上放置n個皇后,任何2個皇后不妨在同一行或同一列或同一斜線上。需求輸入:給定棋盤的大小n (n ≤ 13)需求輸出:輸出有多少种放置方法。#include <stdio.h>#include <math.h>#define MAX 101int total = 0;char m[MAX][MAX];
Time of Update: 2017-01-18
一般的演算法為什麼這麼低效呢?那是因為主串指標回溯情況過多:主串指標如果不回溯的話,速度就會加快,那我們就會想:如何讓主串指標不回溯?KMP演算法就是解決了這個問題,所以速度變得更快速了。它是這樣子的:用一個數組:next[] 求得失配時的位置,然後儲存下來。要說清楚KMP演算法,可以從樸素的模式比對演算法說起。 樸素的模式比對演算法比較容易理解,其實現如下 int Index(char s[], char p[], int pos)
Time of Update: 2017-01-18
編譯器到底做了什麼實現的虛函數的晚綁定呢?我們來探個究竟。 編譯器對每個包含虛函數的類建立一個表(稱為V TA B L E)。在V TA B L E中,編譯器放置特定類的虛函數地址。在每個帶有虛函數的類 中,編譯器秘密地置一指標,稱為v p o i n t e r(縮寫為V P T R),指向這個對象的V TA B L E。通過基類指標做虛函數調 用時(也就是做多態調用時),編譯器靜態地插入取得這個V P T R,並在V TA B L
Time of Update: 2017-01-18
本文執行個體講述了C#中DataBindings用法。分享給大家供大家參考,具體如下:在C#操作資料庫過程中,針對一般的文本控制項,比如TextBox,Label等,我們賦值直接使用類似TextBox.Text=****的方式來進行,這種方式從某種意義上來說的確是最簡便的方式,但是對於複雜一些的空間,比如說DataGridView,這個時候,綁定資料來源我們一般使用DataGridView1.DataSource=****的方式來進行,如果資料來源稍微有更改,那麼只需要重新調用綁定一遍即可。可以
Time of Update: 2017-01-18
事件的聲明和使用與代理有很密切的關係,事件其實是一個或多個方法的代理,當對象的某個狀態發生了變化,代理會被自動調用,從而代理的方法就被自動執行。聲明和使用一個事件需要如下步驟:1.建立一個代理。2.在類的內部利用event關鍵字聲明事件,並且在類中定義呼叫事件的方法,也可以定義一個處理事件訊息的方法。 聲明一個事件的基本形式有兩種: 修飾符 event 類型 標識符 修飾符 event 類型&
Time of Update: 2017-01-18
1. 概述 通過複製一個已經存在的執行個體來建立一個新的執行個體。被複製的執行個體被稱為原型,這個原型是可定製的。2. 模式中的角色 2.1 抽象原型類(Abstract Prototype):提供一個複製介面 2.2 具體原型類(Concrete Prototype): 及實現了複製介面的具體原型類3.
Time of Update: 2017-01-18
調用showdialog方法後,調用代碼被暫停執行,等到調用showdialog方法的表單關係後再繼續執行。而且表單可以返回一個dialogresult值,他描述了表單關閉的原因,例如OK,Cancel,yes,no等。為了讓表單返回一個dialogresult,必須設定表單的dialogresult值,或者在表單的一個按鈕上設定dialogresult屬性。 例子: 下面是子表單代碼,要求輸入phone,然後會返回給父表單。 using System;