原创 《Effective C++讀書筆記》--條款06:若不想使用編譯器自動生成的函數,就應該明確拒絕

首先我們要明確,編譯器產出的所有函數都是public,因此將成員函數聲明爲private且故意不去實現他們可以阻止編譯器爲你自動生成你不想要的函數。但我們在member函數或friend函數中使用該函數時,那麼會在連接時發生錯誤,我們可以

原创 《Effective C++讀書筆記》--條款07:爲多態基類聲明virtual析構函數

在某些情況下,我們需要將析構函數聲明爲virtual,典型的一個例子就是當父類的指針指向子類對象時,刪除該指針只會調用父類的析構函數而沒調用子類的析構函數,也就是局部銷燬,此時會造成內存泄漏。這時我們則需要將父類的析構函數聲明爲virtu

原创 《大話設計模式》讀書筆記之C++實現--chapter27解釋器模式

關於解釋器模式看到了一篇講解的十分好的博客行爲型模式—解釋器模式 ,自己寫了一遍實現,首先要看懂UML類圖,理解終結符解釋器和非終結符解釋器的作用,然後要掌握抽象語法樹的構建,理解了這幾點之後就很容易利用解釋器模式構造自己的解釋器

原创 C++內存管理 RAII

    C++和C#,python等語言不同,其本身是沒有gc機制的,因此我們需要手動來管理內存,一般來說,我們只要將每一個new出來的對象delete之後,就可以保證資源不被泄漏,但萬事都不是那麼理想的,我們可能因爲忘記dele

原创 《Qt打印功能總結》

Qt提供了強大的打印功能,我們可以使用QPainter直接在一個QPrinter的實例中進行打印,對於文件的輸出我們有兩種方式可以選擇,一種是利用QPrinterDialog來指定打印機及打印格式;第二種方法是利用代碼設置QPrinter

原创 《Effective C++讀書筆記》--條款34:區分接口繼承和實現繼承

當我們設計一個類的時候,我們會希望其子類只繼承成員函數的接口,但有時候又希望其繼承接口和實現,但又希望能重寫他們所繼承的接口和實現或者不允許重寫任何東西。我們首先要明確public繼承含義,即is-A的關係,對於基類成立的所有條件,對其p

原创 利用Swig在python中調用C/C++代碼

用途    當我們在開發Python程序的時候,我們可以利用Python的特性來進行敏捷開發,但有時候我們可能在程序的關鍵地方需要比較高的運行效率,或者當我們與底層進行通信時要使用C++來運行,這時我們可以有兩種方法。一是使用su

原创 《Effective C++讀書筆記》--條款02儘量以const,enum,inline替換#define

使用宏定義是一個不被推薦的做法,在閱讀了書籍並且結合自身所讀過的博客,總結以下兩點不推薦使用宏定義的理由。 --1、宏定義是簡單的字符串替換:由於宏定義只是進行簡單的字符串替換,因此有可能會造成意想不到的情況。典型的一個例子就是#defi

原创 QImage與cv::Mat之間的相互轉換

CV::Mat與QImage cv::Mat是OpenCV中用來存儲圖像的數據結構,其中的data是uchar*類型,根據圖像的通道數和位數的不同可以劃分爲不同的類型。例如CV_8UC3代表的是8位三通道的圖像8位代表每個通道的範

原创 機器視覺的相機標定

部分內容參考了知乎專欄,感謝該大神的無私分享 相機標定 一.目的 相機標定是爲了獲得從像素座標系到世界座標系的轉換矩陣,該矩陣由相機的內參和外參決定,當我們求出該矩陣後我們便可以通過像素座標直接得出世界座標,從像素座標到世界座標的

原创 《Qt信號槽的幾種寫法》

信號槽是Qt的核心部分,它使得對象之間的的通信變得很簡單。Qt通過connect來連接信號與槽,當信號被髮出時,槽函數立刻被執行,connect函數有五個重載: QMetaObject::Connection connect(const

原创 Mysql安裝及設置

mysql安裝好了之後我們需要將其加入到windows的系統服務中,即進入mysql安裝目錄的bin目錄下,使用命令mysqld –install安裝MySQL服務,當無法連接mysql數據庫時我們首先要確定mysql服務是否安裝

原创 《大話設計模式》讀書筆記之C++實現--chapter15抽象工廠模式

#include <iostream> using namespace std; //抽象產品類 class AbstractProduct{ public: virtual void ProductFunction()

原创 Python裝飾器與函數式編程

一、函數式編程 “函數式編程”同“面向對象編程”,“面向過程編程”一樣是一種編程範式,它屬於”結構化編程”的一種,主要思想是把運算過程儘量寫成一系列嵌套的函數調用。相比於面向對象,函數式編程的最大優點在於將計算機運算看做是數學中函

原创 什麼情況下必須使用C++的初始化列表

先給理論。 1. 初始化 != 賦值. a.初始化代表爲變量分配內存. 變量在其定義處被編譯器初始化(編譯時). 在函數中, 函數參數初始化發生在函數調用時(運行時). b.賦值代表"擦除對象當前值, 賦予新值". 它不承擔爲對象分