探討C++實現一個不可被繼承的類

C#和Java都提供了一種機制讓一個類不能被繼承,如C#中的sealed關鍵字和Java的final關鍵字,然而C++程式員就沒這麼好命了。不過C++也可以類比出這種效果,原理基於:子類的建構函式會自動調用父類的建構函式,同理解構函式也是一樣。如果父類的建構函式和解構函式被設為私人的話,那麼子類就無法調用,也就達到了父類不可被繼承的目的了。原理很簡單,按此原理我也實作出一個自認為很實用的工具類,在此獻下醜,歡迎大家批評:template< typename TDerive,

C++物件版面配置及多態實現的探索(二)

虛函數的類的物件版面配置(1)如果類中存在虛函數時,情況會怎樣呢?我們知道當一個類中有虛函數時,編譯器會為該類產生一個虛函數表,並在它的每一個對象中插入一個指向該虛函數表的指標,通常這個指標是插在對象的起始位置。所謂的虛函數表實際就是一個指標數組,其中的指標指向真正的函數起始地址。我們來驗證一下,定義一個無成員變數的類C040,內含一個虛函數。struct C040{ virtual void foo() {}};運行如下代碼列印它的大小及對象中的內容。PRINT_SIZE_DETAIL(C04

C++物件版面配置及多態實現的探索

前言本文通過觀察對象的記憶體布局,跟蹤函數調用的彙編代碼。分析了C++對象記憶體的布局情況,虛函數的執行方式,以及虛繼承,等等。寫這篇文章源於我在論壇上看到的一個貼子。有人問VC使用了哪種方式來實現虛繼承。當時我寫了一點代碼想驗證一下,結果發現情況比我想象的要複雜。所以我就乾脆認真把相關的問題都過了一遍,並記錄成本文。我對於C++物件模型的知識主要來自於Lippman的書《Inside the C++ Object

C++實現不可被拷貝的類

在C++中,類的拷貝主要是通過拷貝建構函式和賦值函數,再者就是為拷貝專門實現的成員方法。由於拷貝建構函式和賦值函數在使用者為提供的情況下是由C++編譯器自動產生的,而且是public成員,因此預設的C++類都有拷貝功能。若讓一個C++類不能被拷貝,可顯式地聲明類的拷貝建構函式和賦值函數為私人函數,從而達到該類不可被拷貝的目的。下面簡單地提供一個基類,任何需要提供不可被拷貝功能的C++類只需從此類派生即可。/** 通過私人化拷貝建構函式和賦值函數而達到對象不可被拷貝的目的*

利用Thunk讓C++成員函數變回呼函數

Windows

c#實現遠程關機

using system;    using system.Collections.Generic;    using system.ComponentModel;    using system.Data;    using system.Drawing;    using system.Text;    using system.windows.Forms;    using system.Management;    namespace Ex18_11    {      public

c#啟動本機程式

using system;    using system.Collections.Generic;    using system.ComponentModel;    using system.Data;    using system.Drawing;    using system.Text;    using system.windows.Forms;    using system.IO;    using

c#控制台程式調用直接運行一個新程式和隱藏自己的表單

using System;using System.Runtime.InteropServices;using System.Threading;class TestClass{  static void Main(string[] args)  {    new TestClass();  }  [DllImport("User32.dll", EntryPoint = "FindWindow")]  private static extern

C#簡單實現List亂序

最近搞一個自動運行系統,需要實現大量的隨機方法,其中就有隨機排序List。我記得在JDK裡面的List有個 Collections.shuffle(list) 方法,可以直接進行列表亂序,結果在C#裡面卻沒有發現相關的方法,很是頭疼。看了網上介紹的一些方法發現在效率上都很差,然後查看了一下MSDN,想起List還有個Insert方法,嘿嘿,靈機一動,搞出一個非常簡單的東西,代碼如下:程式碼Random random = new Random();List<Content>

C#給中文加字母

public string getSpell(string cn)     {       byte[] arrCN = Encoding.Default.GetBytes(cn);       if (arrCN.Length > 1)       {         if (cn.CompareTo("吖") < 0)         {           return cn;         }         else if

C#對指定的網頁進行截圖

碰到一個項目,需要對指定的網頁進行截圖儲存,暈死!需求永遠都是怪異的.....解決是關鍵~遂寫了以下代碼,快准狠!(因為趕時間!)可以實現對指定的頁面擷取,按指定的大小產生縮圖,當然也可以1:1的產生圖,頁面上的javascript 運行對截圖貌似沒任何影響,相當的正常,我個人都覺得很神奇。首先對項目添加系統引用System.Drawing;System.Drawing.Design;System.Windows.Forms;擷取指定網頁並轉換成圖片的類:using System;using

c#開發路由選擇程式

路由器名字 路由器子網路遮罩 路由器網路地址 r1 255.255.252.0 130.50.15.0

常用演算法:C#用回溯法找出n個自然數中取r個數的全排列

回溯法也稱為試探法,該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一枚舉和檢驗。在回溯法中,放棄當前候選解,尋找下一個候選解的過程稱為回溯。本執行個體是用回溯法輸出n個自然數中以r個數全排列。代碼如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />public void Arrange(int n, int r) int i =

c#製作的號碼mask程式

在今天,各大媒體都時興通過簡訊參與活動並中獎的行為,中獎號碼大多用‘*’好掩蓋其手機號碼的中間幾位如:138*****345,今天,我們做的就是用一個類庫來實現這個通用功能,以便在網站和程式中引用。本文:下面,我們就開始吧,首先,用vs2005建立一個c#類庫,我們命名為NumMask,把他的Class1改名為容易記憶的其他名字,我改稱Masker,然後我們添加如下代碼:NumMaskusing System;using

C#中時間格式的轉換

有時候我們要對時間進行轉換,達到不同的顯示效果預設格式為:2005-6-6 14:33:34如果要換成成200506,06-2005,2005-6-6或更多的該怎麼辦呢我們要用到:DateTime.ToString的方法(String, IFormatProvider)using System;using System.Globalization;String format="D";DateTime date=DataTime,Now;Response.Write(date.

C#關於Web網站互動檢測

http我想大家和我一樣僅知道握手協議的居多,當需要用到互動檢測的時候就鬱悶了。1HttpWebRequest mHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);2        HttpWebResponse mHttpWebResponse =

C#的winform中使用資料庫連接字串

在解決方案中增加一視窗選擇xml檔案,並將名稱改為app.config.其內容設定如下:<?xml version="1.0" encoding="utf-8"?><configuration> <appSettings>  <add key="source" value="Server=localhost;uid=sa;pwd='fang';database=khgx;"

C# Stable Sort(穩固排序)

保證相等元素的原始位置的排序被稱為是穩固的。一個非穩固排序(unstable sort)不保證相等的元素在排序之後還會保持原來的順序。.NET使用的排序方法是不穩固的。這些排序方法,包括 System.Array.Sort 和

c# GDI+簡單繪圖(四)

前幾篇我已經向大家介紹了如何使用GDI+來繪圖,並做了一個截圖的執行個體,這篇我向大家介紹下如何來做一個類似windows畫圖的工具.個人認為如果想做一個功能強大的繪圖工具,那麼單純掌握GDI還遠遠不夠,我的目前也只能做一個比較簡單的繪圖工具了.不足之處,歡迎大家討論!先來看一下最終效果吧:主要實現功能:畫直線,矩形,橡皮,圓形,切換顏色,開啟圖片,儲存圖片,清除圖片,手動調節畫布大小;軟體剛啟動時,為一張空白畫布,我們可以直接在畫布上繪畫,也可以通過菜單中的“開啟”,匯

C# GDI+簡單繪圖(三)

感謝大家的支援,這幾天從早忙到晚,一個字累呀!!!現在挺困的,但是又不習慣這麼早睡覺,哎~~還是利用這個時間繼續來寫第三篇吧.前兩篇已經基本向大家介紹了繪圖的基本知識.那麼,我就用我們上兩篇所學的,做幾個例子.我們先來做一個簡單的----仿QQ截圖,關於這個的例子其實網上已經有這方面的資料了,但是為了文章的完整性,還是覺得有必要講解.我們先來看一下效果:(圖1)(圖2)

總頁數: 4314 1 .... 2882 2883 2884 2885 2886 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.