国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++中使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了C++中使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

C++中使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換

可給類提供重載的構(gòu)造函數(shù),即接受一個或多個參數(shù)的構(gòu)造函數(shù)。這種構(gòu)造函數(shù)常用于進(jìn)行類型轉(zhuǎn)換。請看下面的 Human 類,它包含一個將整數(shù)作為參數(shù)的重構(gòu)構(gòu)造函數(shù):

class Human
{
    int age;
    public:
    Human(int humansAge): age(humansAge) {}
};

// Function that takes a Human as a parameter
void DoSomething(Human person)
{
    cout << "Human sent did something" << endl;
    return;
}

這個構(gòu)造函數(shù)讓您能夠執(zhí)行下面的轉(zhuǎn)換:

Human kid(10); // convert integer in to a Human
DoSomething(kid);

這樣的轉(zhuǎn)換構(gòu)造函數(shù)讓您能夠執(zhí)行隱式轉(zhuǎn)換:

Human anotherKid = 11; // int converted to Human
DoSomething(10); // 10 converted to Human!

函數(shù) DoSothing(Human person)被聲明為接受一個 Human(而不是 int)參數(shù)!前面的代碼為何可行呢?這是因為編譯器知道 Human 類包含一個將整數(shù)作為參數(shù)的構(gòu)造函數(shù), 進(jìn)而替您執(zhí)行了隱式轉(zhuǎn)換:將您提供的整數(shù)作為參數(shù)發(fā)送給這個構(gòu)造函數(shù),從而創(chuàng)建一個 Human 對象。
為避免隱式轉(zhuǎn)換,可在聲明構(gòu)造函數(shù)時使用關(guān)鍵字 explicit:

class Human
{
    int age;
    public:
    explicit Human(int humansAge): age(humansAge) {}
};

并非必須使用關(guān)鍵字 explicit,但在很多情況下,這都是一種良好的編程實踐。以下示例程序演示了另一個版本的 Human 類,這個版本不允許隱式轉(zhuǎn)換:

#include<iostream>
using namespace std;

class Human
{
    int age;
public:
    // explicit constructor blocks implicit conversions
    explicit Human(int humansAge) : age(humansAge) {}
};

void DoSomething(Human person)
{
    cout << "Human sent did something" << endl;
    return;
}

int main()
{
    Human kid(10);    // explicit converion is OK
    Human anotherKid = Human(11); // explicit, OK
    DoSomething(kid); // OK

    // Human anotherKid = 11; // failure: implicit conversion not OK
    // DoSomething(10); // implicit conversion 

    return 0;
}

輸出:

Human sent did something

分析:
無輸出的代碼行與提供輸出的代碼行一樣重要。這個 Human 類包含一個使用關(guān)鍵字 explicit 聲明的構(gòu)造函數(shù),如第 8 行所示,而第 17~27 行的 main()以各種不同的方式實例化這個類。使用 int 來實例化 Human 類的代碼行執(zhí)行的是顯式轉(zhuǎn)換,都能通過編譯。第 23 和 24 行涉及隱式轉(zhuǎn)換,它們被注釋掉了,但如果將第 8 行的關(guān)鍵字 explicit 刪掉,這些代碼行也能通過編譯。這個實例表明,使用關(guān)鍵字
explicit 可禁止隱式轉(zhuǎn)換。

提示:

運算符也存在隱式轉(zhuǎn)換的問題,也可在運算符中使用關(guān)鍵字 explicit 來禁止隱式轉(zhuǎn)換。

該文章會更新,歡迎大家批評指正。

推薦一個零聲學(xué)院的C++服務(wù)器開發(fā)課程,個人覺得老師講得不錯,
分享給大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,
TCP/IP,協(xié)程,DPDK等技術(shù)內(nèi)容
點擊立即學(xué)習(xí):C/C++后臺高級服務(wù)器課程文章來源地址http://www.zghlxwxcb.cn/news/detail-758286.html

到了這里,關(guān)于C++中使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 《More Effective C++》《基礎(chǔ)議題——2、盡量使用C++類型的風(fēng)格轉(zhuǎn)換》

    類型轉(zhuǎn)換是一般程序員所不能忍受的,但是在緊要關(guān)頭,類型轉(zhuǎn)換是必須的。C風(fēng)格的類型轉(zhuǎn)換太過簡單,粗暴,不能進(jìn)行精確的類型轉(zhuǎn)換;為了彌補(bǔ)C轉(zhuǎn)換上功能的不足,C++提供了四種常用的類型轉(zhuǎn)換來應(yīng)付復(fù)雜的轉(zhuǎn)換需求。 static_cast用于在編譯時執(zhí)行類型轉(zhuǎn)換,主要用于相

    2024年01月18日
    瀏覽(17)
  • C++ 學(xué)習(xí) ::【基礎(chǔ)篇:16】:C++ 類的基本成員函數(shù):拷貝構(gòu)造函數(shù)(認(rèn)識、特征、注意點及典型使用場景)及其基本寫法與調(diào)用

    C++ 學(xué)習(xí) ::【基礎(chǔ)篇:16】:C++ 類的基本成員函數(shù):拷貝構(gòu)造函數(shù)(認(rèn)識、特征、注意點及典型使用場景)及其基本寫法與調(diào)用

    本系列 C++ 相關(guān)文章 僅為筆者學(xué)習(xí)筆記記錄,用自己的理解記錄學(xué)習(xí)!C++ 學(xué)習(xí)系列將分為三個階段: 基礎(chǔ)篇、STL 篇、高階數(shù)據(jù)結(jié)構(gòu)與算法篇 ,相關(guān)重點內(nèi)容如下: 基礎(chǔ)篇 : 類與對象 (涉及C++的三大特性等); STL 篇 : 學(xué)習(xí)使用 C++ 提供的 STL 相關(guān)庫 ; 高階數(shù)據(jù)結(jié)構(gòu)與算

    2024年02月08日
    瀏覽(21)
  • c++ 學(xué)習(xí) 之 構(gòu)造函數(shù)的分類和調(diào)用類型 深入學(xué)習(xí)

    構(gòu)造函數(shù)是在C++中用于創(chuàng)建和初始化對象的特殊函數(shù)。構(gòu)造函數(shù)可以根據(jù)不同的特性和參數(shù)進(jìn)行分類,以下是一些常見的構(gòu)造函數(shù)分類和詳細(xì)講解它們的調(diào)用方式: 默認(rèn)構(gòu)造函數(shù): 默認(rèn)構(gòu)造函數(shù)是一個特殊的構(gòu)造函數(shù),它沒有參數(shù),也可以沒有具體的實現(xiàn)代碼。如果沒有顯

    2024年02月10日
    瀏覽(49)
  • C++ operator關(guān)鍵字的使用(重載運算符、仿函數(shù)、類型轉(zhuǎn)換操作符)

    C++ operator的使用(重載運算符、仿函數(shù)、類型轉(zhuǎn)換操作符) C++11實用技術(shù)(一)auto與decltype的使用 C++11實用技術(shù)(二)std::function和bind綁定器 C++11實用技術(shù)(三)std::future、std::promise、std::packaged_task、async C++11 中,operator 是一個,用于重載運算符。通過重載運算符

    2024年02月14日
    瀏覽(31)
  • C++中的類型轉(zhuǎn)換函數(shù)

    在C++編程中,我們經(jīng)常需要在不同的數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換。C++提供了一種特殊的成員函數(shù),叫做類型轉(zhuǎn)換函數(shù),可以讓我們自定義類型之間的轉(zhuǎn)換規(guī)則。在本文中,我們將詳細(xì)介紹類型轉(zhuǎn)換函數(shù)的定義、使用和注意事項。 類型轉(zhuǎn)換函數(shù)是C++中的一個特性,它允許將當(dāng)前類的

    2024年02月19日
    瀏覽(15)
  • 【零基礎(chǔ)學(xué)習(xí)C++】構(gòu)造函數(shù)與析構(gòu)函數(shù)

    【零基礎(chǔ)學(xué)習(xí)C++】構(gòu)造函數(shù)與析構(gòu)函數(shù)

    個人主頁:【??個人主頁】 系列專欄:【??系列專欄】 期末復(fù)習(xí)筆記,感興趣的可以收藏 C++用以初始化對象的數(shù)據(jù)成員的函數(shù) 構(gòu)造函數(shù)要注意的知識點: 構(gòu)造函數(shù)是沒有返回值類型的。 構(gòu)造函數(shù)的函數(shù)名必須 與類名一致。 構(gòu)造函數(shù)并不是由我們手動調(diào)用的, 構(gòu)造函數(shù)

    2024年02月11日
    瀏覽(30)
  • 【C++航海王:追尋羅杰的編程之路】C++的類型轉(zhuǎn)換

    【C++航海王:追尋羅杰的編程之路】C++的類型轉(zhuǎn)換

    目錄 1 - C語言中的類型轉(zhuǎn)換 2 - 為什么C++需要四種類型轉(zhuǎn)換 3 - C++強(qiáng)制類型轉(zhuǎn)換 3.1 - static_cast 3.2 -?reinterpret_cast 3.3 -?const_cast 3.4 -?dynamic_cast 4 - RTTI 在C語言中,如果 賦值運算符左右兩側(cè)類型不同,或者形參與實參類型不匹配,或者返回值類型與接收返回值類型不一致時,就需

    2024年04月13日
    瀏覽(23)
  • 【C++】dynamic_cast 進(jìn)行類型轉(zhuǎn)換步驟以及底層實現(xiàn)

    dynamic_cast 是 C++ 中的一種類型轉(zhuǎn)換方式,它可以在運行時進(jìn)行類型檢查, 用于將一個指針或引用強(qiáng)制轉(zhuǎn)換為另一個類型的指針或引用 。dynamic_cast 能夠進(jìn)行安全的向下轉(zhuǎn)型,即將一個基類指針或引用轉(zhuǎn)換為派生類指針或引用。如果轉(zhuǎn)換成功,dynamic_cast 返回轉(zhuǎn)換后的指針或引用

    2023年04月25日
    瀏覽(23)
  • c++ 學(xué)習(xí)之 構(gòu)造函數(shù)的使用

    在上面的代碼中,定義了一個名為person的類,并實現(xiàn)了默認(rèn)構(gòu)造函數(shù)、有參構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)以及析構(gòu)函數(shù)。然后,使用不同的方式調(diào)用了拷貝構(gòu)造函數(shù),讓我們逐步解釋拷貝構(gòu)造函數(shù)的作用和調(diào)用時機(jī): 這里拷貝構(gòu)造函數(shù)的作用是將已經(jīng)存在的對象(p1)的屬性值復(fù)

    2024年02月10日
    瀏覽(14)
  • 【Kotlin】類的繼承 ② ( 使用 is 運算符進(jìn)行類型檢測 | 使用 as 運算符進(jìn)行類型轉(zhuǎn)換 | 智能類型轉(zhuǎn)換 | Any 超類 )

    【Kotlin】類的繼承 ② ( 使用 is 運算符進(jìn)行類型檢測 | 使用 as 運算符進(jìn)行類型轉(zhuǎn)換 | 智能類型轉(zhuǎn)換 | Any 超類 )

    在 Kotlin 中 , 如果不確定一個 實例對象的類型 , 可以 使用 is 運算符進(jìn)行判定 , 使用方法 上述用法可以判定 實例對象 是否是 判定類型 , 如果是 返回 true , 反之 返回 false ; 代碼示例 : 在下面的代碼中 , 調(diào)用 student is Person 判斷 student 對象是否是 Person 類型 ; 執(zhí)行結(jié)果 : 將 子類

    2024年02月03日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包