為什么要阻止實(shí)例化
一個(gè)類不想被實(shí)例化通常有兩種情況:一種是抽象類,一種是工具類。
抽象類
比如現(xiàn)在需要計(jì)算圖形的面積,可以是正方形、長方形、圓形等等。
于是抽象出了基類,叫圖形。
Sharp作為抽象基類,也不好計(jì)算其面積,所以沒有實(shí)例化的必要。 工具類 比如我們?cè)赒T中經(jīng)常遇到的代碼:class Sharp
{
};
classCircle:public Sharp
{
};
class Rectangle : public Sharp
{
};
QFileDialog::getOpenFileName(this,"選擇一個(gè)文件", QCoreApplication::applicationFilePath(),"*.cpp");
很多情況下我們只是需要通過函數(shù) getOpenFileName 來獲得當(dāng)前文件的路徑,沒必要去創(chuàng)建對(duì)象。當(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)建對(duì)象沒有意義,可以直接通過類名調(diào)用靜態(tài)成員函數(shù)。 如何阻止 方法一:類中包含純虛函數(shù)。 還是上面的Sharp類。
classSharp
{
public:
virtual void get_s() = 0; //純虛函數(shù)
};
純虛函數(shù)沒有函數(shù)體。 含有純虛函數(shù)的類叫抽象類。 抽象類不好創(chuàng)建對(duì)象,因?yàn)榫退闶莿?chuàng)建了對(duì)象,調(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)建對(duì)象,相當(dāng)于間接的阻止了該類實(shí)例化對(duì)象。
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64918 -
C++
+關(guān)注
關(guān)注
22文章
2119瀏覽量
75337
原文標(biāo)題:面試題:C++如何阻止類被實(shí)例化?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
主流的 MCU 開發(fā)語言為什么是 C 而不是 C++?
在單片機(jī)的地界兒里,C語言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說內(nèi)存這道坎兒。您當(dāng)stm32f4的256kRAM

請(qǐng)問CCyUSBDevice如何同時(shí)實(shí)例化2個(gè)?
官方的控制臺(tái)程序和C++ CYAPI編程手冊(cè)中,CCyUSBDevice都只實(shí)例化了一次即CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL);按照C++
發(fā)表于 05-19 07:27
基于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è)對(duì)象模型 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ù)可以不寫返回值類型,編譯器會(huì)默認(rèn)為返回 int。 但是 C++ 的函數(shù),除了構(gòu)造和析構(gòu)這兩個(gè)特殊的函數(shù),必須
C7000 C/C++優(yōu)化指南用戶手冊(cè)
電子發(fā)燒友網(wǎng)站提供《C7000 C/C++優(yōu)化指南用戶手冊(cè).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對(duì)象對(duì)接方式更是幾乎無縫對(duì)接,非常的方便好用。
評(píng)論