條款19 :設計class猶如設計type

當你定義了一個新的class時,也就定義了一個新的type。身為c++程式員,你有許多時間主要用來擴張你的類型系統。這意味著你並不只是class設計者,還是type設計者。重載函數和操作符,控制記憶體的分配和歸還,定義對象的初始化和終結…全都在你的手上。因此你應該帶著和“語言設計者當初設計語言內建類型時”一樣的謹慎來研討class的設計。 幾乎每一個class都要求你面對以下提問。  新type的對象應該如何被建立和銷毀?對象的初始化和對象的賦值該有什麼樣的差別?(對應不同的函數)新type的對

更改Ubuntu gcc、g++預設編譯器版本

轉一篇文章:升級Ubuntu到11.10,但在編譯Android的時候出錯了。這個Android在升級系統之前編譯是沒有錯誤的,對比發現升級到Ubuntu 11.10後gcc、g++的版本都是4.6.1。而升級之前的版本是4.4.6。我想多半原因就在這裡了。要想解決問題需要更改Ubuntu gcc、g++預設編譯器版本。google一把發現有兩種方法可以更改。方法一:首先,看一下你的Ubuntu都裝了哪些版本的gcc 用命令:ls /usr/bin/gcc* -l 

條款21 :必須返回對象時,別妄想返回其reference

上一條款我們說了,能以pass by reference to const 盡量不用pass by value。是不是所有的都要這樣呢?這會使我們犯錯:開始傳遞一些reference指向其實並不存在的對象,這不是一件好事。 考慮一個用以表現有理數的class,內含一個函數用來計算兩個有理數的乘積。classRational{public:       Rational(intnumerator=0                            intdenominator=-1);   

Ubuntu 12.04中文IME的安裝

from : http://www.2cto.com/os/201207/144189.htmlUbuntu 12.04中文IME的安裝 Ubuntu上的IME主要有小小輸入平台(支援拼音/二筆/五筆等),Fcitx,Ibus,Scim等。其中Scim和Ibus是IME架構。在Ubuntu的中文系統中內建了中文IME,通過Ctrl+Space可切換中英文IME。這裡我們主要說下Ubuntu英文系統中,中文IME的安裝。安裝IME的第一步,是安裝語言套件。我們選擇System Settings--

條款20 :寧以pass-by-reference-to-const 替換pass-by-value

預設的情況下,C++是以by value方式傳遞對象至函數。函數實參都是以實際實參的複件為初始值,而調用端獲得的亦是函數傳回值的一個複件。這些複件系由對象的copy建構函式產出,這可能使得pass by value成為昂貴的操作。        考慮下面的繼承體系: classPerson{public:    Person();    vitual~Person();private:    std::stringname;   

近場通訊技術 (1)

NFC定義     近場通訊(英語:Near Field Communication,NFC),又稱近距離無線通訊,是一種短距離的高頻無線通訊技術,允許電子裝置之間進行非接觸式點對點資料傳輸,在十公分(3.9英吋)內交換資料。這個技術由免接觸式射頻識別(RFID,國內很多地方的公交系統、校園一卡通都採用了這種技術)演變而來,由飛利浦、諾基亞和索尼共同研製開發,其基礎是RFID及互連技術。近場通訊是一種短距高頻的無線電技術,在13.56MHz頻率運行於20公分距離內。其傳輸速度有106 Kbit/

條款22 :將成員變數聲明為private

首先看看為什麼成員變數不該是public的,然後讓你看看所有反對public成員變數的論點同樣適用於protected成員變數。最後匯出一個結論,所有的成員變數都應該是private的。一.文法一致性。如果成員變數不是public的,那麼所有的訪問成員變數,都變成了函數,所以就不存在是不是有括弧的問題了。二.使用成員函數會讓你對成員變數有更加精確的控制。因此你可以設計出“不準訪問(不寫對應此成員的函數)”,“唯讀訪問(const)”,“讀寫訪問”。三.封裝。如果你通過函數訪問成員變數,日後,當你

jTextArea即時更新顯示

其他外類對jTextArea進行即時更新顯示時,首先要將jTextArea設定為public static,比如有主視窗Frame,其帶有一個jTextArea,要把Data所擷取的資料即時更新到Frame的jTextArea中。則:假定主視窗Frame類為:class Frame extends jFrame implements ……{    //設定jTextAreapublic static jTextArea  jtextarea;……public Frame

條款25 :儘可能延後變數定義式的出現時間

只要你定義了一個變數,而類型帶有一個建構函式和一個解構函式,你就得忍受構造成本與析構成本。或許你認為你不可能定義一個不會使用的變數,但是請看下面的代碼:std::stringencryptPassword(conststd::string&password){    usingnamespacestd;    stringencrypted;    if(password.length()<MinimumPasswordLength){          

條款11:在operator=處理自我賦值

自我賦值發生在對象被賦值給自己:class Widget {...}Widget w ;…w = w // 賦值給自己還有一個隱含的會發生自我賦值的例子:         a[i]  = a[j];//當i = j時下面有這樣一個類:class Bitmap{};class Widget {       ...private :       Bitmap *pb;};l  版本一Widget& Widget::operator= (const Widget& rhs){     

Heritrix的Modules介面不能改變選擇項的問題

具體的原因分析見“Heritrix的Modules介面不能改變選擇項的問題”原因:找相關的Options檔案是在Modules相對路徑下的,而Modules目錄是在 conf目錄下。Classpath沒有找到需要的檔案目錄。解決方案:在Eclipse裡面設定conf為Classpath( 在Eclipse的Run Dialog中,Classpath標籤Table,選中User Entries,然後右邊會有Advance選項,選Add External Folder,把你的Conf加進去就行了)。

條款28 :避免返回handles指向對象內部成分

我們先看一個例子:classPoint{public:       Point(intx,inty);       voidsetX(intnewVal);       voidsetY(intnewVal);}; structRectData{       Pointulhc;       Pointlrhc;};classRectangle{public:       Point&upperLeft()const{returnpData->ulhc;}       Point&

條款12:複製對象時勿忘其每一個成分

設計良好的OO系統會將對象的內部封裝起來,只留兩個函數負責對象拷貝,那便是copy建構函式和copy assignment操作符。         我們知道,如果不給類提供一個copy函數,則當需要時,編譯器會為我們提供copy函數。          但是,如果你自己聲明了copy函數,就是在拒絕了編譯器為你提供的版本。意思是你不喜歡編譯器所提供的版本,此時,如果它好像是被冒犯了一樣,如果你的代碼出現了錯誤,它也不提醒你。classCustomer{...   

lucene的建立檢索學習執行個體源碼

/** * 測試索引 * @author Administrator * */import java.io.*;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import

條款30 :透徹瞭解inline的裡裡外外

為什麼用Inline函數?看起來像函數,但是沒有函數調用時的壓棧出棧的開銷。並且,我們知道編譯器最佳化的機制通常被設計用來濃縮那些“不含函數調用”的代碼。所以當你inline了某個函數,編譯器就有能力對它執行語境相關最佳化。但是並不是所有的函數都變成inline都好。我們知道,inline後,程式的目標代碼是會變大的。

LuceneRegex查詢RegenxQuery

1 /* 2 * Regex查詢 3 */ 4 5 6 import java.io.IOException; 7 8 import org.apache.lucene.analysis.standard.StandardAnalyzer; 9 import org.apache.lucene.document.Document;10 import org.apache.lucene.document.Field;11 import

條款13:以對象管理資源

所謂有資源,就是你一旦使用了它,就要記得歸還系統。如果不這樣做,就會發生資源的浪費。這裡的資源不僅僅是指記憶體,也包括:檔案描述符,互斥鎖,資料庫連接…本條款是一個直接而易懂的基於對象的資源管理方法,建立在C++對建構函式,解構函式,copy函數的基礎上。經驗顯示,經過訓練後嚴守這些做法,可以幾乎消除資源管理的問題。下面我們就開始了~~~~~ 首先,我們以原廠模式來說起:假如我們使用一個用來類比投資行為的程式庫,其中各式各樣的投資類型繼承自一個root class

條款16:成對使用new和delete時要採用相同的形式

以下動作會有什麼錯?std::string*stringArray=newstd::string[10];...deletestringArray;這樣會導致不明確的錯誤,因為你申請了一個字串數組,長度是10,而你只delete了一個,其他的元素的解構函式可能沒有調用。 當你使用new時,會發生兩件事:1)記憶體被分配出來2)針對此記憶體會有一個(或更多)建構函式被調用當你使用delete時,也有兩件事:1)針對此記憶體會有一個(或更多)解構函式被調用2)記憶體才被釋放Delete的最大問題在於

73本免費的、語言無關的優秀的編程書籍

本文源自Stackoverflow中的一個文章,匯總了73本免費的、語言無關的優秀的編程書籍,業界對這些書籍的評價都很高,非常值得一看。 這些書籍中有HTML格式的,也有PDF格式的,當然,都是英文版的。不過,部分書籍的中文譯本已經出現在網上,有興趣的同學可以Google一下。 每個程式員都應該知道的97件事 演算法和資料結構(PDF) 演算法(草案) 開源應用程式的體繫結構

UBUNTU中安裝SMPLAYER

使用smplayer前必須要安裝mplayer所以:首先:sudo apt-get install mplayer    然後:安裝mplayer時應該已經同時一併安裝了ffmpeg,播放各種多媒體格式都不會有問題,如果沒有,這樣sudo apt-get install ffmpeg 再次:安裝 w32codecs解碼器, 到Mplayer網站下載最新的解碼包,網址是 http://www.mplayerhq.hu/design7/dload.html 選擇其中“Binary Codec

總頁數: 61357 1 .... 5620 5621 5622 5623 5624 .... 61357 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.