為什么要阻止實例化
一個類不想被實例化通常有兩種情況:一種是抽象類,一種是工具類。
抽象類
比如現在需要計算圖形的面積,可以是正方形、長方形、圓形等等。
于是抽象出了基類,叫圖形。
Sharp作為抽象基類,也不好計算其面積,所以沒有實例化的必要。 工具類 比如我們在QT中經常遇到的代碼:class Sharp
{
};
classCircle:public Sharp
{
};
class Rectangle : public Sharp
{
};
QFileDialog::getOpenFileName(this,"選擇一個文件", QCoreApplication::applicationFilePath(),"*.cpp");
很多情況下我們只是需要通過函數 getOpenFileName 來獲得當前文件的路徑,沒必要去創建對象。當然這里只是舉個例子,并不是說 QFileDialog 是工具類。
還有這樣一種情況,我們需要一個類來封裝加、減、乘、除。
class Calculate
{
public:
static int add(int x, int y);
static intsub(intx,inty);
static intmul(int x, int y);
static int div(int x, int y);
};
上面這個類就是一個典型的工具類,用它創建對象沒有意義,可以直接通過類名調用靜態成員函數。 如何阻止 方法一:類中包含純虛函數。 還是上面的Sharp類。
classSharp
{
public:
virtual void get_s() = 0; //純虛函數
};
純虛函數沒有函數體。 含有純虛函數的類叫抽象類。 抽象類不好創建對象,因為就算是創建了對象,調用純虛函數的時候,也不知道如何執行。 方法二:構造函數私有 還是上面的計算類。
class Calculate
{
private:
Calculate();
public:
static int add(int x, int y);
static int sub(int x, int y);
static int mul(int x, int y);
static int div(int x, int y);
};
把構造函數設置成私有,就不能在類的外部創建對象,相當于間接的阻止了該類實例化對象。
審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
函數
+關注
關注
3文章
4344瀏覽量
62857 -
C++
+關注
關注
22文章
2114瀏覽量
73773
原文標題:面試題:C++如何阻止類被實例化?
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Spire.XLS for C++組件說明
Spire.XLS for C++ 是一款專業的 C++ Excel 組件,可以用在各種 C++ 框架和應用程序中。Spire.XLS for C++ 提供了一個對象模型 Excel
同樣是函數,在C和C++中有什么區別
同樣是函數,在 C 和 C++ 中有什么區別? 第一個返回值。 C語言的函數可以不寫返回值類型,編譯器會默認為返回 int。 但是 C++ 的函數,除了構造和析構這兩個特殊的函數,必須
ostream在c++中的用法
ostream 是 C++ 標準庫中一個非常重要的類,它位于 頭文件中(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 類及其派生類(如 std::cout
OpenVINO2024 C++推理使用技巧
很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優化與整理,已經是非常貼近開發的使用習慣與推理方式。與OpenCV的Mat對象對接方式更是幾乎無縫對接,非常的方便好用。
C++中實現類似instanceof的方法
C++有多態與繼承,但是很多人開始學習C++,有時候會面臨一個常見問題,就是如何向下轉型,特別是不知道具體類型的時候,這個時候就希望C++ 可以向Java或者Python中有instanceof這個
鴻蒙OS開發實例:【Native C++】
使用DevEco Studio創建一個Native C++應用。應用采用Native C++模板,實現使用NAPI調用C標準庫的功能。使用C標準庫hypot接口計算兩個給定數平方和的平
使用 MISRA C++:2023? 避免基于范圍的 for 循環中的錯誤
在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客中,我們將仔細研究以 C++ 中?for?循環為中心的特定規則。
c語言,c++,java,python區別
C語言、C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言: C語言是一種面向過程的編程語言。它具有底層的特性,能夠對計算機硬件進行直接操作。
vb語言和c++語言的區別
VB語言和C++語言是兩種不同的編程語言,雖然它們都屬于高級編程語言,但在設計和用途上有很多區別。下面將詳細比較VB語言和C++語言的區別。 設計目標: VB語言(Visual Basic)是由
評論