欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++阻止類被實(shí)例化詳解

 更新時(shí)間:2021年09月28日 10:32:41   作者:sanyu.lh  
下面小編就為大家?guī)?lái)一篇淺談C++阻止類被實(shí)例化詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧

不想一個(gè)類被實(shí)例化通常有兩個(gè)目的:抽象類和工具類

抽象類

實(shí)現(xiàn)該類的的就是想成為一個(gè)抽象類,抽象類一般只被繼承,不能被實(shí)例化,例如最基本的例子

1.【動(dòng)物類】是一個(gè)抽象類;

2.【猴子類】【貓類】【狗類】這三個(gè)類繼承自【動(dòng)物類】;

3.【猴子類】【貓類】【狗類】可以被實(shí)例化;

4.【動(dòng)物類】不能被實(shí)例化;

這種類更多的是用來(lái)定義接口,而完全不關(guān)心實(shí)現(xiàn)。

工具類

這種類提供一些功能但是一般不需要實(shí)現(xiàn)成一個(gè)實(shí)體,感覺上這種類更多的像是發(fā)揮了namespace的作用,或者說(shuō)把一些功能模塊化,體現(xiàn)隔離或者解耦思想。例如一個(gè)所謂的【計(jì)算類】用于計(jì)算“加 減 乘 除”四種最簡(jiǎn)單的計(jì)算。只需要提供 add(), sub(),multi(),div()四個(gè)方法就可以了,也不需要什么成員變量,也不需要維護(hù)什么狀態(tài)。

代碼實(shí)現(xiàn)

在代碼層面如何做到禁止類被實(shí)例化呢,一般是兩種辦法:

1.為類定義純虛成員函數(shù);

2.將構(gòu)造函數(shù)聲明為protect或者private。

純虛函數(shù)

pure virtual函數(shù)會(huì)導(dǎo)致抽象class,這是定理,因此只要為類提供一個(gè)pure virtual函數(shù)就可以達(dá)到禁止類被實(shí)例化的目的。但是這就是說(shuō)我們必須要給這個(gè)類塞一個(gè)pure virtual函數(shù),為了阻止實(shí)例化硬塞一個(gè)pure virtual似乎不夠優(yōu)雅,有沒有別的方法呢?!禘ffective C++》條款7的表述就非常直接了:為你希望它成為抽象的那個(gè)class聲明一個(gè)pure virtual析構(gòu)函數(shù)。

但是抽象類一般通常是會(huì)被繼承的,具有多態(tài)目的,這導(dǎo)致需要為這個(gè)pure virtual析構(gòu)函數(shù)提供一份定義。這好像非常別扭因?yàn)镸eyers在條款34中又說(shuō)為pure virtual函數(shù)提供實(shí)現(xiàn)是“令人意外的”。當(dāng)然我們可以認(rèn)為一個(gè)有定義的pure virtual析構(gòu)函數(shù)就是“實(shí)現(xiàn)抽象類的官方指定權(quán)威方法”。

因此,使用有定義的pure virtual析構(gòu)函數(shù)是阻止類被實(shí)例化的一個(gè)方法,但僅限于抽象類。

非public的構(gòu)造函數(shù)

如果目的是工具類怎么辦呢,一般的做法是把構(gòu)造方法聲明為private,自然就沒法實(shí)例化了,因?yàn)橥饨鐭o(wú)法調(diào)用這個(gè)構(gòu)造函數(shù)。

但是如果這個(gè)類同時(shí)又提供了一個(gè)public靜態(tài)方法,這個(gè)靜態(tài)方法是可以調(diào)用私有

參考

http://www.dbjr.com.cn/article/224221.htm
//www.dbjr.com.cn/article/224216.htm

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼

    C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼

    猜數(shù)字小游戲是我們小時(shí)候喜歡我們一個(gè)經(jīng)典小游戲。這篇文章將利用C語(yǔ)言中的循環(huán)語(yǔ)句、分支語(yǔ)句和函數(shù)實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-10-10
  • C++實(shí)現(xiàn)考勤管理系統(tǒng)

    C++實(shí)現(xiàn)考勤管理系統(tǒng)

    這篇文章主要介紹了C++實(shí)現(xiàn)考勤管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于C++實(shí)現(xiàn)的線程休眠代碼

    基于C++實(shí)現(xiàn)的線程休眠代碼

    這篇文章主要介紹了基于C++實(shí)現(xiàn)的線程休眠代碼,包括了Linux平臺(tái)及基于boost庫(kù)的兩種實(shí)現(xiàn)方法,有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Unity編輯器下重啟的方法

    Unity編輯器下重啟的方法

    這篇文章主要介紹了Unity編輯器下重啟的方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開關(guān)閉和讀取操作詳解

    C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開關(guān)閉和讀取操作詳解

    這篇文章主要介紹了C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開關(guān)閉和讀取操作,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++之文件輸入/輸出流類解讀

    C++之文件輸入/輸出流類解讀

    這篇文章主要介紹了C++之文件輸入/輸出流類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 淺析C語(yǔ)言中sscanf 的用法

    淺析C語(yǔ)言中sscanf 的用法

    以下是對(duì)C語(yǔ)言中sscanf函數(shù)的使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C語(yǔ)言實(shí)現(xiàn)直方圖均衡化

    C語(yǔ)言實(shí)現(xiàn)直方圖均衡化

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)直方圖均衡化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • c++仿函數(shù)和函數(shù)適配器的使用詳解

    c++仿函數(shù)和函數(shù)適配器的使用詳解

    這篇文章主要介紹了c++仿函數(shù)和函數(shù)適配器的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-12-12
  • 使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    Visual?Studio?2022?引入了用于?Linux?C++?開發(fā)的本機(jī)?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下
    2021-11-11

最新評(píng)論