中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

那個(gè)網(wǎng)站做外貿(mào)好百度大搜是什么

那個(gè)網(wǎng)站做外貿(mào)好,百度大搜是什么,vuejs 做網(wǎng)站 性能,天津seo推廣優(yōu)化特殊類的設(shè)計(jì)與類型轉(zhuǎn)換 特殊類的設(shè)計(jì)請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在堆上創(chuàng)建對(duì)象請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在棧上創(chuàng)建對(duì)象請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能創(chuàng)建一個(gè)對(duì)象(單例模式) C的類型轉(zhuǎn)換 特殊類的設(shè)計(jì) 請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在堆上創(chuàng)建對(duì)象 通過(guò)new創(chuàng)建的類就…

特殊類的設(shè)計(jì)與類型轉(zhuǎn)換

  • 特殊類的設(shè)計(jì)
    • 請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在堆上創(chuàng)建對(duì)象
    • 請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在棧上創(chuàng)建對(duì)象
    • 請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能創(chuàng)建一個(gè)對(duì)象(單例模式)
  • C++的類型轉(zhuǎn)換

特殊類的設(shè)計(jì)

請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在堆上創(chuàng)建對(duì)象

通過(guò)new創(chuàng)建的類就是堆上的。
方法一:

#include<iostream>using namespace std;
class HeapOnly
{
public:static HeapOnly* func()//這里如果不用靜態(tài)就無(wú)法創(chuàng)建對(duì)象了,也導(dǎo)致這個(gè)函數(shù)無(wú)法被調(diào)用{return new HeapOnly;}
private:HeapOnly()//防止隨意的創(chuàng)建對(duì)象{}HeapOnly(const HeapOnly& a) = delete;//如果不刪除拷貝函數(shù)創(chuàng)建的對(duì)象還是在棧上
};
int main()
{HeapOnly* p1 = HeapOnly::func();//HeapOnly p2(*p1);//這樣避免了p2對(duì)象創(chuàng)建在棧上return 0;
}

這里主要以封禁構(gòu)造函數(shù)為主,讓外部只能通過(guò)調(diào)用func函數(shù)方式去創(chuàng)建對(duì)象,func函數(shù)的內(nèi)部是通過(guò)new創(chuàng)建的,這里要注意的就是拷貝構(gòu)造的問(wèn)題。
賦值重載不用刪除,因?yàn)樾枰F(xiàn)有一個(gè)對(duì)象才能賦值給另一個(gè)對(duì)象,上面的代碼只會(huì)創(chuàng)建出堆上的對(duì)象。
方法二:

#include<iostream>using namespace std;class HeapOnly
{
public:HeapOnly(){}void Delete(){this->~HeapOnly();}
private:~HeapOnly(){}HeapOnly(const HeapOnly& a) = delete;
};int main()
{HeapOnly* p1 = new HeapOnly;p1->Delete();return 0;
}

封禁析構(gòu)函數(shù),需要自己手動(dòng)釋放內(nèi)存。

請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能在棧上創(chuàng)建對(duì)象

這里要注意一點(diǎn),靜態(tài)區(qū)也不行。
方法一:

#include <iostream>
using namespace std;
class NonInherit
{
public:static NonInherit func(){return NonInherit();}void Pintf(){cout << "Pintf" << endl;}
private:NonInherit(){}NonInherit(const NonInherit& p) = delete;
};
int main()
{NonInherit::func().Pintf();//static NonInherit p1 = NonInherit::func();//防止p1創(chuàng)建在靜態(tài)區(qū)上return 0;
}

這里就像匿名對(duì)象的感覺(jué),如果不封拷貝構(gòu)造就會(huì)出現(xiàn)注釋上的問(wèn)題。
方法二:

#include <iostream>
using namespace std;
class NonInherit
{
public:static NonInherit func(){return NonInherit();}void Pintf() const{cout << "Pintf" << endl;}
private:NonInherit(){}NonInherit(const NonInherit& p) = delete;
};
int main()
{const NonInherit& p1 = NonInherit::func();//用引用接收p1.Pintf();//然后在使用return 0;
}

請(qǐng)?jiān)O(shè)計(jì)一個(gè)類,只能創(chuàng)建一個(gè)對(duì)象(單例模式)

設(shè)計(jì)模式:
設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。
單例模式:

一個(gè)類只能創(chuàng)建一個(gè)對(duì)象,即單例模式,該模式可以保證系統(tǒng)中該類只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn),該實(shí)例被所有程序模塊共享。比如在某個(gè)服務(wù)器程序中,該服務(wù)器的配置信息存放在一個(gè)文件中,這些配置數(shù)據(jù)由一個(gè)單例對(duì)象統(tǒng)一讀取,然后服務(wù)進(jìn)程中的其他對(duì)象再通過(guò)這個(gè)單例對(duì)象獲取這些配置信息,這種方式簡(jiǎn)化了在復(fù)雜環(huán)境下的配置管理。

單例模式有兩種實(shí)現(xiàn)模式:
餓漢模式
就是說(shuō)不管你將來(lái)用不用,程序啟動(dòng)時(shí)就創(chuàng)建一個(gè)唯一的實(shí)例對(duì)象。

#include<iostream>
#include<map>
#include<string>
using namespace std;
class Singleton
{
public:static Singleton& func(){return _a;//拿到對(duì)象本身}void Insert(string str, int salary){arr[str] = salary;}void Printf(){for (auto& e : arr){cout << e.first << ":" << e.second << endl;}}
private:Singleton(){}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;map<string, int> arr;static Singleton _a;
};
Singleton Singleton::_a;//在外部初始化對(duì)象,同類對(duì)象只會(huì)調(diào)用一次構(gòu)造函數(shù)int main()
{Singleton::func().Insert("aaa", 111);Singleton&p = Singleton::func();p.Insert("bbb", 222);p.Insert("ccc", 333);p.Insert("ddd", 444);p.Insert("eee", 555);p.Printf();return 0;
}

在這里插入圖片描述
這個(gè)模式缺點(diǎn):
如果數(shù)據(jù)量太大,啟動(dòng)就會(huì)非常的緩慢。
如果有多個(gè)文件一起,都有餓漢模式的代碼,他們互相之間有依賴,但是編譯器很難控制先初始化誰(shuí)。

懶漢模式
如果單例對(duì)象構(gòu)造十分耗時(shí)或者占用很多資源,比如加載插件啊, 初始化網(wǎng)絡(luò)連接啊,讀取文件啊等等,而有可能該對(duì)象程序運(yùn)行時(shí)不會(huì)用到,那么也要在程序一開(kāi)始就進(jìn)行初始化,就會(huì)導(dǎo)致程序啟動(dòng)時(shí)非常的緩慢。 所以這種情況使用懶漢模式(延遲加載)更好。

#include<iostream>
#include<map>
#include<string>
#include<mutex>
using namespace std;
template<class T>
class Lock
{
public:Lock(T& p)//因?yàn)殒i不允許拷貝:_p(p){_p.lock();}~Lock(){_p.unlock();}
private:T& _p;//所以這里成員用引用
};
class Singleton
{
public:static Singleton& func(){if (_a == nullptr)//避免每次調(diào)用的時(shí)候都進(jìn)行加鎖的操作,提高效率{Lock<mutex> p(mex);//用智能指針是為了防止下面的new出現(xiàn)異常導(dǎo)致未解鎖//如果不加鎖,容易發(fā)生內(nèi)存泄露,開(kāi)辟多個(gè)空間,最終指針只會(huì)指向一處空間if (_a == nullptr)//第一次調(diào)用創(chuàng)建對(duì)象{_a = new Singleton;}}return *_a;}void Insert(string str, int salary){arr[str] = salary;}void Printf(){for (auto& e : arr){cout << e.first << ":" << e.second << endl;}}
private:Singleton(){}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;map<string, int> arr;static Singleton* _a;static mutex mex;//鎖
};
Singleton* Singleton::_a = nullptr;//在外部初始化對(duì)象,同類對(duì)象只會(huì)調(diào)用一次構(gòu)造函數(shù)
mutex Singleton::mex;//定義鎖
int main()
{Singleton::func().Insert("aaa", 111);Singleton& p = Singleton::func();p.Insert("bbb", 222);p.Insert("ccc", 333);p.Insert("ddd", 444);p.Insert("eee", 555);p.Printf();return 0;
}

在這里插入圖片描述
并且,一般單例對(duì)象不用考慮釋放,因?yàn)橐粋€(gè)進(jìn)程在結(jié)束的時(shí)候資源會(huì)回收給OS。
如果有需要處理的資源,需要在內(nèi)部定義一個(gè)函數(shù)去處理某個(gè)資源,然后其他資源不用處理:

static void Delete()//手動(dòng)釋放資源
{Lock<mutex> p(mex);if (_a != nullptr){delete _a;_a = nullptr;}
}

假如忘記回收這個(gè)資源了呢?
在內(nèi)部定義一個(gè)GC的類,這個(gè)類的析構(gòu)函數(shù)內(nèi)部調(diào)用上面的Delete函數(shù)。

class GC
{
public:~GC(){if (_a){cout << "~GC()" << endl;Delete();}}
};

然后再外部定義一個(gè)全局的GC類的對(duì)象,在程序結(jié)束的時(shí)候就會(huì)去調(diào)用析構(gòu)函數(shù)。
在這里插入圖片描述
主要是幫助檢查有沒(méi)有手動(dòng)釋放掉這一出資源。
注意:C++11前是無(wú)法保證線程靜態(tài)的初始化是安全的,C++11之后可以。
也就是說(shuō)懶漢還有這種寫法:

static Singleton& func()
{static Singleton _a;return _a;
}

函數(shù)的成員也就不用了靜態(tài)對(duì)象。

C++的類型轉(zhuǎn)換

C語(yǔ)言有兩種類型轉(zhuǎn)換,一個(gè)是隱式類型轉(zhuǎn)換,另一個(gè)是強(qiáng)制類型轉(zhuǎn)換。

#include<iostream>
using namespace std;int main()
{//隱式類型int a = 1;double b = a;//強(qiáng)制類型int c = 10;int* p = &c;int d = (int)p;return 0;
}

C++有四種類型轉(zhuǎn)換,是期望大家能夠規(guī)范使用的。
為什么C++需要四種類型轉(zhuǎn)換
C風(fēng)格的轉(zhuǎn)換格式很簡(jiǎn)單,但是有不少缺點(diǎn)的:

1.隱式類型轉(zhuǎn)化有些情況下可能會(huì)出問(wèn)題:比如數(shù)據(jù)精度丟失。
2.顯式類型轉(zhuǎn)換將所有情況混合在一起,代碼不夠清晰。
因此C++提出了自己的類型轉(zhuǎn)化風(fēng)格,注意因?yàn)镃++要兼容C語(yǔ)言,所以C++中還可以使用C語(yǔ)言的轉(zhuǎn)化風(fēng)格。

static_cast
static_cast用于非多態(tài)類型的轉(zhuǎn)換(靜態(tài)轉(zhuǎn)換),編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換都可用。
static_cast,但它不能用于兩個(gè)不相關(guān)的類型進(jìn)行轉(zhuǎn)換。
在這里插入圖片描述
reinterpret_cast
reinterpret_cast操作符通常為操作數(shù)的位模式提供較低層次的重新解釋,用于將一種類型轉(zhuǎn)換
為另一種不同的類型。
在這里插入圖片描述
const_cast
const_cast最常用的用途就是刪除變量的const屬性,方便賦值。
在這里插入圖片描述
這里看起來(lái)并沒(méi)有被賦值成功是因?yàn)榫幾g器進(jìn)行了優(yōu)化,認(rèn)為const的變量不會(huì)被修改,所以這個(gè)值一直放在了寄存器中,并沒(méi)有從內(nèi)存中獲取,數(shù)據(jù)一直未被更新到寄存器當(dāng)中。
在這里插入圖片描述
dynamic_cast
dynamic_cast用于將一個(gè)父類對(duì)象的指針/引用轉(zhuǎn)換為子類對(duì)象的指針或引用(動(dòng)態(tài)轉(zhuǎn)換)
向上轉(zhuǎn)型:子類對(duì)象指針/引用->父類指針/引用(不需要轉(zhuǎn)換,賦值兼容規(guī)則)
向下轉(zhuǎn)型:父類對(duì)象指針/引用->子類指針/引用(用dynamic_cast轉(zhuǎn)型是安全的)
注意:

1.dynamic_cast只能用于父類含有虛函數(shù)的類
2. dynamic_cast會(huì)先檢查是否能轉(zhuǎn)換成功,能成功則轉(zhuǎn)換,不能則返回0

#include<iostream>
using namespace std;
class A
{
public:virtual void f() {}int a;
};
class B : public A
{
public:int b;
};
void fun(A* pa)
{// dynamic_cast會(huì)先檢查是否能轉(zhuǎn)換成功,能成功則轉(zhuǎn)換,不能則返回B* pb = dynamic_cast<B*>(pa);//子類指向父類,訪問(wèn)父類的內(nèi)容的時(shí)候虛表可能會(huì)越界產(chǎn)生報(bào)錯(cuò)if (pb)//檢查是否合法,其實(shí)就是拒絕了子類指向父類{pb->a++;pb->b++;cout << "a++ " << "b++" << endl;}
}
int main()
{A a;B b;fun(&a);fun(&b);return 0;
}

在這里插入圖片描述
注意:
強(qiáng)制類型轉(zhuǎn)換關(guān)閉或掛起了正常的類型檢查,每次使用強(qiáng)制類型轉(zhuǎn)換前,程序員應(yīng)該仔細(xì)考慮是
否還有其他不同的方法達(dá)到同一目的,如果非強(qiáng)制類型轉(zhuǎn)換不可,則應(yīng)限制強(qiáng)制轉(zhuǎn)換值的作用
域,以減少發(fā)生錯(cuò)誤的機(jī)會(huì)。強(qiáng)烈建議:避免使用強(qiáng)制類型轉(zhuǎn)換。

http://www.risenshineclean.com/news/62296.html

相關(guān)文章:

  • dw做的網(wǎng)站鏈接不會(huì)跳轉(zhuǎn)什么是搜索引擎優(yōu)化
  • 做期貨網(wǎng)站微營(yíng)銷平臺(tái)系統(tǒng)
  • 西寧網(wǎng)站設(shè)計(jì)制作公司品牌推廣軟文200字
  • 只做襯衫的網(wǎng)站關(guān)鍵詞采集軟件
  • 沈陽(yáng)網(wǎng)站建設(shè)找哪家系統(tǒng)優(yōu)化軟件哪個(gè)好
  • 企業(yè)網(wǎng)站建設(shè)方案書范本域名批量查詢
  • 網(wǎng)站 續(xù)費(fèi)商業(yè)策劃公司十大公司
  • 網(wǎng)站后端都需要什么意思網(wǎng)站交換鏈接的常見(jiàn)形式
  • 企業(yè)展示型電商網(wǎng)站模板google關(guān)鍵詞規(guī)劃師
  • php和什么語(yǔ)言做網(wǎng)站豬肉價(jià)格最新消息
  • 在越南做網(wǎng)站需要什么排超聯(lián)賽積分榜
  • 工業(yè)做網(wǎng)站技能培訓(xùn)有哪些科目
  • 大連城市建設(shè)管理局網(wǎng)站建站公司網(wǎng)站建設(shè)
  • 自己的網(wǎng)站首頁(yè)背景怎么做最有效的宣傳方式
  • 義烏做網(wǎng)站的公司哪家好廣州seo外包
  • 桂林做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷推廣方案范文
  • 完備的網(wǎng)站建設(shè)推廣做網(wǎng)站推廣一般多少錢
  • 長(zhǎng)沙小升初有什么做試卷的網(wǎng)站濟(jì)南網(wǎng)站優(yōu)化排名推廣
  • 北京做網(wǎng)站公司有哪些百度怎么優(yōu)化網(wǎng)站關(guān)鍵詞
  • ssm如何做網(wǎng)站驗(yàn)證登陸綜合型b2b電子商務(wù)平臺(tái)網(wǎng)站
  • 如何在網(wǎng)上接做網(wǎng)站的小項(xiàng)目抖音seo
  • 建設(shè)導(dǎo)航網(wǎng)站百度投訴電話人工服務(wù)總部
  • 學(xué)校門戶網(wǎng)站建設(shè)的意義怎樣做好銷售和客戶交流
  • 怎么建設(shè)網(wǎng)站臨汾撫州seo外包
  • 鄭州專業(yè)手機(jī)網(wǎng)站制作semiconductor是什么意思
  • 微信公眾號(hào)移動(dòng)網(wǎng)站開(kāi)發(fā)windows優(yōu)化大師要會(huì)員
  • 長(zhǎng)鏈接轉(zhuǎn)化成短鏈接工具日照網(wǎng)站優(yōu)化公司
  • 網(wǎng)站設(shè)計(jì)字體大小規(guī)范武漢網(wǎng)站推廣公司排名
  • 網(wǎng)站建設(shè) 業(yè)務(wù)員提成seo上海優(yōu)化
  • 網(wǎng)站如何做數(shù)據(jù)分析報(bào)告網(wǎng)絡(luò)營(yíng)銷活動(dòng)策劃