為什么要阻止實(shí)例化
一個(gè)類不想被實(shí)例化通常有兩種情況:一種是抽象類,一種是工具類。
抽象類
比如現(xiàn)在需要計(jì)算圖形的面積,可以是正方形、長方形、圓形等等。
于是抽象出了基類,叫圖形。
Sharp作為抽象基類,也不好計(jì)算其面積,所以沒有實(shí)例化的必要。 工具類 比如我們在QT中經(jīng)常遇到的代碼:class Sharp
{
};
classCircle:public Sharp
{
};
class Rectangle : public Sharp
{
};
QFileDialog::getOpenFileName(this,"選擇一個(gè)文件", QCoreApplication::applicationFilePath(),"*.cpp");
很多情況下我們只是需要通過函數(shù) getOpenFileName 來獲得當(dāng)前文件的路徑,沒必要去創(chuàng)建對象。當(dāng)然這里只是舉個(gè)例子,并不是說 QFileDialog 是工具類。
還有這樣一種情況,我們需要一個(gè)類來封裝加、減、乘、除。
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);
};
上面這個(gè)類就是一個(gè)典型的工具類,用它創(chuàng)建對象沒有意義,可以直接通過類名調(diào)用靜態(tài)成員函數(shù)。 如何阻止 方法一:類中包含純虛函數(shù)。 還是上面的Sharp類。
classSharp
{
public:
virtual void get_s() = 0; //純虛函數(shù)
};
純虛函數(shù)沒有函數(shù)體。 含有純虛函數(shù)的類叫抽象類。 抽象類不好創(chuàng)建對象,因?yàn)榫退闶莿?chuàng)建了對象,調(diào)用純虛函數(shù)的時(shí)候,也不知道如何執(zhí)行。 方法二:構(gòu)造函數(shù)私有 還是上面的計(jì)算類。
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);
};
把構(gòu)造函數(shù)設(shè)置成私有,就不能在類的外部創(chuàng)建對象,相當(dāng)于間接的阻止了該類實(shí)例化對象。
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4365瀏覽量
63905 -
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74599
原文標(biāo)題:面試題:C++如何阻止類被實(shí)例化?
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:ThreadPoll
1、程序簡介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫的線程池處理:ThreadPoll。本案例完成如下工作:創(chuàng)建1個(gè)線程池,設(shè)置該線程池內(nèi)部有1024個(gè)線程空間。啟動(dòng)5個(gè)線程

Spire.XLS for C++組件說明
Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序中。Spire.XLS for C++ 提供了一個(gè)對象模型 Excel

EE-112:模擬C++中的類實(shí)現(xiàn)
電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++中的類實(shí)現(xiàn).pdf》資料免費(fèi)下載
發(fā)表于 01-03 15:15
?0次下載

同樣是函數(shù),在C和C++中有什么區(qū)別
同樣是函數(shù),在 C 和 C++ 中有什么區(qū)別? 第一個(gè)返回值。 C語言的函數(shù)可以不寫返回值類型,編譯器會默認(rèn)為返回 int。 但是 C++ 的函數(shù),除了構(gòu)造和析構(gòu)這兩個(gè)特殊的函數(shù),必須
C7000 C/C++優(yōu)化指南用戶手冊
電子發(fā)燒友網(wǎng)站提供《C7000 C/C++優(yōu)化指南用戶手冊.pdf》資料免費(fèi)下載
發(fā)表于 11-09 15:00
?0次下載

MSP430優(yōu)化C/C++編譯器v21.6.0.LTS
電子發(fā)燒友網(wǎng)站提供《MSP430優(yōu)化C/C++編譯器v21.6.0.LTS.pdf》資料免費(fèi)下載
發(fā)表于 11-08 14:57
?0次下載

ARM優(yōu)化C/C++編譯器 v20.2.0.LTS
電子發(fā)燒友網(wǎng)站提供《ARM優(yōu)化C/C++編譯器 v20.2.0.LTS.pdf》資料免費(fèi)下載
發(fā)表于 11-07 10:46
?0次下載

TMS320C6000優(yōu)化C/C++編譯器v8.3.x
電子發(fā)燒友網(wǎng)站提供《TMS320C6000優(yōu)化C/C++編譯器v8.3.x.pdf》資料免費(fèi)下載
發(fā)表于 11-01 09:35
?1次下載

TMS320C28x優(yōu)化C/C++編譯器v22.6.0.LTS
電子發(fā)燒友網(wǎng)站提供《TMS320C28x優(yōu)化C/C++編譯器v22.6.0.LTS.pdf》資料免費(fèi)下載
發(fā)表于 10-31 10:10
?0次下載

C7000優(yōu)化C/C++編譯器
電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費(fèi)下載
發(fā)表于 10-30 09:45
?0次下載

ostream在c++中的用法
ostream 是 C++ 標(biāo)準(zhǔn)庫中一個(gè)非常重要的類,它位于 頭文件中(實(shí)際上,更常見的是通過包含 頭文件來間接包含 ,因?yàn)?包含了 和 )。 ostream 類及其派生類(如 std::cout
OpenVINO2024 C++推理使用技巧
很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優(yōu)化與整理,已經(jīng)是非常貼近開發(fā)的使用習(xí)慣與推理方式。與OpenCV的Mat對象對接方式更是幾乎無縫對接,非常的方便好用。
C++中實(shí)現(xiàn)類似instanceof的方法
C++有多態(tài)與繼承,但是很多人開始學(xué)習(xí)C++,有時(shí)候會面臨一個(gè)常見問題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時(shí)候,這個(gè)時(shí)候就希望C++ 可以向Java或者Python中有instanceof這個(gè)

評論