最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++隱式類型轉(zhuǎn)換示例分享

 更新時(shí)間:2014年03月11日 15:32:49   作者:  
這篇文章主要介紹了c++隱式類型轉(zhuǎn)換的二個(gè)示例,需要的朋友可以參考下

復(fù)制代碼 代碼如下:

/*=============================================================================
#     FileName: explicit_try.cc
#         Desc: 驗(yàn)證含有一個(gè)參數(shù)的非explicit構(gòu)造函數(shù)是否可以拷貝初始化
=============================================================================*/
#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;

class People {
    public:
        People() = default;
        People(string s):name(s) { }
        string getName() const { return name; }
        static vector<string> &getVector() { return name_arr; }
        //隱式類型轉(zhuǎn)換,用string生成一個(gè)臨時(shí)量,因此可以綁定到const形參上
        static void addToVector(const People &p) {
            name_arr.push_back(p.getName());
        }
    private:
        string name = "";
        static vector<string> name_arr;
};

vector<string> People::name_arr = {};

int main(int argc, const char *argv[])
{
    People p;
    cout << "p :" << endl;
    cout << p.getName() << endl;
    People tom("tom");
    People::addToVector(tom);
    string Bob = "Bob";
    People::addToVector(Bob);//隱式類型轉(zhuǎn)換
    //People::addToVector("Bob");//只允許一步的隱式類型轉(zhuǎn)換

    vector<string> v = People::getVector();
    cout << "name_arr:" << endl;
    for (const auto &p : v) {
        cout << p << " ";
    }
    cout << endl;

    string myName = "guo";
    People guo = myName; //隱式類型轉(zhuǎn)換允許拷貝初始化形式的轉(zhuǎn)換
    cout << guo.getName() << endl;
    return 0;
}



下面再來一個(gè)例子

復(fù)制代碼 代碼如下:

#include <string>
#include <iostream>
using namespace std;
class Fruit               //定義一個(gè)類,名字叫Fruit
{
 string name;     //定義一個(gè)name成員          
 string colour;   //定義一個(gè)colour成員

public:
 bool isSame(const Fruit &otherFruit)   //期待的形參是另一個(gè)Fruit類對(duì)象,測試是否同名
 {
  return name == otherFruit.name;
 }
 void print()              //定義一個(gè)輸出名字的成員print()
 {
  cout<<colour<<" "<<name<<endl;
 }
 Fruit(const string &nst,const string &cst = "green"):name(nst),colour(cst){}  //構(gòu)造函數(shù)

 Fruit(){}
};

int main()
{
 Fruit apple("apple");
 Fruit orange("orange");
 cout<<"apple = orange ?: "<<apple.isSame(orange)<<endl;  //沒有問題,肯定不同
 cout<<"apple = /"apple/" ?:"<<apple.isSame(string("apple")); //用一個(gè)string做形參?

    return 0;
}

你會(huì)發(fā)現(xiàn)最后的使用上,我們用一個(gè)string類型作一個(gè)期待Fruit類形參的函數(shù)的參數(shù),結(jié)果竟然得出了是true(1),不要感到奇怪,這就是我現(xiàn)在要講的東西,隱式類類型轉(zhuǎn)換:“可以用單個(gè)實(shí)參來調(diào)用的構(gòu)造函數(shù)定義了從形參類型到該類型的一個(gè)隱式轉(zhuǎn)換?!保–++ Primer)首先要單個(gè)實(shí)參,你可以把構(gòu)造函數(shù)colour的默認(rèn)實(shí)參去掉,也就是定義一個(gè)對(duì)象必須要兩個(gè)參數(shù)的時(shí)候,文件編譯不能通過。然后滿足這個(gè)條件后,系統(tǒng)就知道怎么轉(zhuǎn)換了,不過這里比較嚴(yán)格:)以前我們構(gòu)造對(duì)象的時(shí)候Fruit apple("apple")其實(shí)也已經(jīng)有了一個(gè)轉(zhuǎn)換,從const char *的C字符串格式,轉(zhuǎn)為string,在這里,你再apple.isSame("apple")的話,蠢系統(tǒng)不懂得幫你轉(zhuǎn)換兩次,所以你必須要用string()來先強(qiáng)制轉(zhuǎn)換,然后系統(tǒng)才知道幫你從string隱式轉(zhuǎn)換為Fruit,當(dāng)然其實(shí)你自己也可以幫他完成。cout<<"apple = /"apple/" ?:"<<apple.isSame(Fruit("apple"));這樣。參考例子1.2 :Fruit apple = Fruit("apple");  //定義一個(gè)Fruit類對(duì)象apple。也就是這樣轉(zhuǎn)換的。不過這就叫顯式轉(zhuǎn)換了,我們不標(biāo)出來,系統(tǒng)幫我們完成的,叫隱式的貝。這里要說的是,假如你顯示轉(zhuǎn)換就可以不管有多少參數(shù)了,比如在前面提到的必須需要兩個(gè)參數(shù)的構(gòu)造函數(shù)時(shí)的例子。

例:

復(fù)制代碼 代碼如下:

#include <string>
#include <iostream>
using namespace std;
class Fruit               //定義一個(gè)類,名字叫Fruit
{
 string name;     //定義一個(gè)name成員          
 string colour;   //定義一個(gè)colour成員

public:
 bool isSame(const Fruit &otherFruit)   //期待的形參是另一個(gè)Fruit類對(duì)象,測試是否同名
 {
  return name == otherFruit.name;
 }
 void print()              //定義一個(gè)輸出名字的成員print()
 {
  cout<<colour<<" "<<name<<endl;
 }
 Fruit(const string &nst,const string &cst):name(nst),colour(cst){}  //構(gòu)造函數(shù)

 Fruit(){}
};

int main()
{
 Fruit apple("apple","green");
 Fruit orange("orange","yellow");
 cout<<"apple = orange ?: "<<apple.isSame(orange)<<endl;  //沒有問題,肯定不同
 cout<<"apple = /"apple/" ?:"<<apple.isSame(Fruit("apple","green")); //顯式轉(zhuǎn)換
    return 0;
}


在你不想隱式轉(zhuǎn)換,以防用戶誤操作怎么辦?C++提供了一種抑制構(gòu)造函數(shù)隱式轉(zhuǎn)換的辦法,就是在構(gòu)造函數(shù)前面加explicit關(guān)鍵字,你試試就知道,那時(shí)你再希望隱式轉(zhuǎn)換就會(huì)導(dǎo)致編譯失敗,但是,要說明的是,顯式轉(zhuǎn)換還是可以進(jìn)行。

相關(guān)文章

  • C++利用循環(huán)和棧實(shí)現(xiàn)走迷宮

    C++利用循環(huán)和棧實(shí)現(xiàn)走迷宮

    這篇文章主要為大家詳細(xì)介紹了C++利用循環(huán)和棧實(shí)現(xiàn)走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語言實(shí)現(xiàn)繪制LoveBeat愛心曲線的示例代碼

    C語言實(shí)現(xiàn)繪制LoveBeat愛心曲線的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何溧陽C語言實(shí)現(xiàn)繪制LoveBeat愛心曲線,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • C語言控制進(jìn)程之進(jìn)程等待詳解

    C語言控制進(jìn)程之進(jìn)程等待詳解

    這篇文章主要介紹了C語言控制進(jìn)程之進(jìn)程等待即回收子進(jìn)程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語言中的數(shù)據(jù)整除判斷問題

    C語言中的數(shù)據(jù)整除判斷問題

    這篇文章主要介紹了C語言中的數(shù)據(jù)整除判斷問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中指向?qū)ο蟮某V羔樑c指向常對(duì)象的指針詳解

    C++中指向?qū)ο蟮某V羔樑c指向常對(duì)象的指針詳解

    如果一個(gè)變量已經(jīng)被聲明成常變量,則只能用指向常變量的指針變量指向它,而不能用一般的(非const型的)指針變量指向它
    2013-10-10
  • C++基于字符串實(shí)現(xiàn)大數(shù)相乘問題的代碼詳解

    C++基于字符串實(shí)現(xiàn)大數(shù)相乘問題的代碼詳解

    在實(shí)際編程中,我們經(jīng)常會(huì)遇到需要處理大整數(shù)的情況,由于編程語言中內(nèi)置整數(shù)類型有其表示范圍的限制,當(dāng)需要處理的整數(shù)超出這些范圍時(shí),就不能直接使用內(nèi)置類型進(jìn)行計(jì)算,所以本文給大家介紹了相關(guān)的解決方法,需要的朋友可以參考下
    2025-03-03
  • C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng)

    C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c語言算術(shù)運(yùn)算符越界問題解決方案

    c語言算術(shù)運(yùn)算符越界問題解決方案

    大量的安全漏洞是由于計(jì)算機(jī)算術(shù)運(yùn)算的微妙細(xì)節(jié)引起的, 具體的C語言, 諸如符號(hào)數(shù)和無符號(hào)數(shù)之間轉(zhuǎn)換, 算術(shù)運(yùn)算的越界都會(huì)導(dǎo)致不可預(yù)知的錯(cuò)誤和安全漏洞, 具體的案例數(shù)不勝數(shù).
    2012-11-11
  • C++中的單例模式介紹

    C++中的單例模式介紹

    單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設(shè)計(jì)模式。其意圖是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn),該實(shí)例被所有程序模塊共享
    2013-03-03
  • C++中對(duì)象的賦值與復(fù)制操作詳細(xì)解析

    C++中對(duì)象的賦值與復(fù)制操作詳細(xì)解析

    對(duì)象之間的賦值也是通過賦值運(yùn)算符“=”進(jìn)行的。本來賦值運(yùn)算符“=”只能用來對(duì)單個(gè)的變量賦值,現(xiàn)在被擴(kuò)展為兩個(gè)同類對(duì)象之間的賦值,這是通過對(duì)賦值運(yùn)算符的重載實(shí)現(xiàn)的
    2013-10-10

最新評(píng)論

山东省| 陕西省| 刚察县| 黄石市| 太仆寺旗| 遂昌县| 武邑县| 美姑县| 开封市| 稷山县| 达拉特旗| 西乌珠穆沁旗| 化德县| 中江县| 永州市| 唐河县| 青龙| 汽车| 陆川县| 朝阳市| 鸡西市| 紫金县| 临汾市| 南阳市| 长汀县| 通化县| 蛟河市| 肥城市| 龙江县| 连江县| 丹东市| 兴安盟| 宁国市| 杭锦后旗| 翁牛特旗| 盘山县| 锦州市| 潍坊市| 莫力| 恩施市| 团风县|