C++基礎(chǔ)①命名空間結(jié)構(gòu)體和引用

接續(xù)【C語言基礎(chǔ)系列】

前言

在進(jìn)行NDK開發(fā)的時(shí)候 伟恶, 我們使用的很多第三方庫 冤寿, 大多數(shù)都是使用的C/C++編寫的 霎槐, 有些可能是C和C++混編的 送浊。如,我在NDK系列中提到的增量更新使用的兩個(gè)庫 bsdiffbzip2 丘跌。那么 袭景, 我們?cè)趯W(xué)完C語言之后 唁桩, 有必要研究一下C++,因?yàn)镃++是C的拓展 耸棒, 加入了面向?qū)ο蠛湍0寮夹g(shù) 荒澡,那么基本語法就不用介紹了。本系列假定你具有一定的編程經(jīng)驗(yàn)与殃,對(duì)面向?qū)ο笥幸欢ǖ牧私?单山。

命名空間

在Java中 , 我們使用包來區(qū)分文件的所在路徑和類來自哪個(gè)包 奈籽,使用package來聲明文件在哪個(gè)文件目錄下 , 進(jìn)而在使用的時(shí)候可以區(qū)分 鸵赫, 來自不同的包的相同類名 衣屏。在C++里面沒有package關(guān)鍵字 , 而是使用namespace來作為區(qū)分 辩棒, 在PHP中也是如此 狼忱, 在PHP5.0的時(shí)候引入的了namespace來做為區(qū)分不同路徑下的同名函數(shù)和類 。

定義namespace

  /*
    cpp namespace demo
*/

#include <iostream>

/*
    自定義命名空間 一睁, 相當(dāng)于Java中的包 钻弄。
    命名空間可以嵌套
*/
namespace NSP_A
{
    class A {
    public:
        void sayHello() {
            std::cout << "say Hello " << std::endl;
        }
    };

    // 嵌套namespace
    namespace NSP_A_1
    {
        class A {
        public:
            void sayHello() {
                std::cout << "Say Hello 1" << std::endl;
            }
        };
    }
}

使用namespace

// 標(biāo)準(zhǔn)命名空間 (包含很多標(biāo)準(zhǔn)的定義)
using namespace std;

// use namespace
using namespace NSP_A;


/*
    使用自定義命名空間
*/
void useNameSpace() {

    A a; 
    a.sayHello();

    // 嵌套命名空間使用
    NSP_A_1::A a2;
    a2.sayHello();

}

在C++中也定義了一些標(biāo)準(zhǔn)命名空間 , 如std 者吁,C++中也兼容C語言語法 窘俺, 可以引入C語言頭文件,使用C標(biāo)準(zhǔn)函數(shù) 复凳。

C++ 類 與 結(jié)構(gòu)體

C++是面向?qū)ο笳Z言 瘤泪, 面向?qū)ο笳Z言的一大特征就是可以將類型整合起來 , 可以創(chuàng)建類型實(shí)例 育八。

創(chuàng)建C++類

/*
    cpp class type
*/

#include <iostream>

using namespace std;

namespace CPP_CLASS
{
    class Animal {
    // C++ 共用權(quán)限訪問修飾符
    private:
        char* name;
        int age;
    public:
        void setName(char* name) {
            this->name = name;
        }
        void setAge(int age) {
            this->age = age;
        }

        void showInfo() {
            cout << "名稱:" << this->name << " 年歲:" << this->age << endl;
        }
    };
}

寫法都是類似的 对途, C++字段和函數(shù)都是采用的共享權(quán)限修飾符 , 值得注意的是 髓棋, 在C++中 实檀, 結(jié)構(gòu)體里面的屬性和函數(shù)也具有權(quán)限訪問修飾符 。

/*
    CPP Struct
*/
namespace CPP_STRUCT
{
    // C++結(jié)構(gòu)體與C結(jié)構(gòu)不同之處在于 按声, 在C++中結(jié)構(gòu)體內(nèi)字段函數(shù)可以有權(quán)限修飾符膳犹,用法和類用法一致
    // 和類不同的是 , struct 不能繼承
    struct Person
    {
    private:
        char* name;
        int age;
    public:
        void setName(char* name) {
            this->name = name;
        }
        void setAge(int age) {
            this->age = age;
        }

        void showPersonInfo() {
            cout << "姓名: " << this->name << "  年齡: " << this->age << endl;
        }
    };
}

結(jié)構(gòu)體和類最大的不同是 签则, 結(jié)構(gòu)體不能繼承 镣奋, 不能進(jìn)行抽象化。

使用C++類 與 結(jié)構(gòu)體


/* CPP Class */
using namespace CPP_CLASS;

/* CPP Struct */
using namespace CPP_STRUCT;

/*
    Simple CPP Class
*/
void useCppClass() {

    Animal animal;
    animal.setName("dog");
    animal.setAge(2);

    animal.showInfo();

}

/*
    C and C++ 結(jié)構(gòu)體的區(qū)別
*/
void useCppStruct() {

    Person p;
    p.setName("zeno");
    p.setAge(20);

    p.showPersonInfo();

}

在C++中 怀愧, 使用類與使用結(jié)構(gòu)體 侨颈, 用法并無二致 余赢, 只是結(jié)構(gòu)不能使用new而類可以使用 , new出來的是一個(gè)對(duì)象指針 哈垢。

引用

相信大家對(duì)引用并不陌生 侍筛, 在Java中 榛斯, 我們常常將對(duì)象變量叫做對(duì)象引用 , 在C++中也不例外 , C++中的引用也可以作為對(duì)象變量 季率, 但C++中的引用不會(huì)開辟新的空間 , 去存儲(chǔ)指向?qū)ο髢?nèi)存空間的地址值 卤唉, 而是作為對(duì)象引用的一個(gè)別名 硅卢。

簡(jiǎn)單示意圖

引用

引用示例

/*
    CPP 引用 
*/

#include <iostream>

namespace CPP_QUOTE {

    class Quote {
    public:
        int x = 10;

        // 引用 ,就是傳入變量的別名渴频,引用不會(huì)開辟新的內(nèi)存空間芽丹,如同指針一樣,指向的是傳入變量的內(nèi)存空間
        // 一般作為函數(shù)參數(shù)或返回值
        // 引用使用方便
        void swip(int &a, int &b) {
            int c = 0;
            c = a;
            a = b;
            b = c;
        }

        // 指針交換
        void swip_p(int* a , int* b) {
            int c = 0; 
            c = *a;
            *a = *b;
            *b = c;
        }
    };

}

引用在函數(shù)傳值的時(shí)候卜朗, 可以當(dāng)指針來使用 拔第, 引用最廣泛的用途就在于 , 在函數(shù)參數(shù)中 场钉, 充當(dāng)指針用 蚊俺。

引用使用


/* C++ 引用的使用 */
/* CPP Quote */
using namespace CPP_QUOTE;

void useCppQuote() {

    Quote q;
    // Quote q 的別名
    Quote &q1 = q;

    q1.x = 100;

    printf("q的內(nèi)存地址 : %#x , q1的內(nèi)存地址:%#x\n", &q, &q1);

    cout << " q == " << q.x << endl;

    int x = 20, y = 40;

    q1.swip(x, y);

    cout << " q swipe  x = " << x << "  y = " << y << endl;

    // 指針值交換
    q1.swip_p(&x, &y);

    cout << " 指針值交換 :   x = " << x << "  y = " << y << endl;
}

打印對(duì)象的地址與引用變量的地址 , 我們會(huì)發(fā)現(xiàn)內(nèi)存地址是一致 逛万, 因?yàn)橐檬亲兞康膭e名 泳猬, 不會(huì)創(chuàng)建新的內(nèi)存空間。

結(jié)語

有了C語言基礎(chǔ) 宇植, 學(xué)C++ 暂殖, 只要掌握語法的差異性和一些C++的特性 , C++還是很容易上手的 当纱, 基礎(chǔ)語法 呛每, 需要?jiǎng)邮志?, 多做實(shí)驗(yàn) 坡氯, 慢慢就會(huì)熟能生巧 晨横。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箫柳,隨后出現(xiàn)的幾起案子手形,更是在濱河造成了極大的恐慌,老刑警劉巖悯恍,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库糠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞬欧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門贷屎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艘虎,你說我怎么就攤上這事唉侄。” “怎么了野建?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵属划,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我候生,道長(zhǎng)同眯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任唯鸭,我火速辦了婚禮须蜗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肿孵。我一直安慰自己唠粥,他們只是感情好疏魏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布停做。 她就那樣靜靜地躺著,像睡著了一般大莫。 火紅的嫁衣襯著肌膚如雪蛉腌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天只厘,我揣著相機(jī)與錄音烙丛,去河邊找鬼。 笑死羔味,一個(gè)胖子當(dāng)著我的面吹牛河咽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赋元,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忘蟹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了搁凸?” 一聲冷哼從身側(cè)響起媚值,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎护糖,沒想到半個(gè)月后褥芒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫡良,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年锰扶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了献酗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡少辣,死狀恐怖凌摄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漓帅,我是刑警寧澤锨亏,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站忙干,受9級(jí)特大地震影響器予,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捐迫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一乾翔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧施戴,春花似錦反浓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肪笋,卻和暖如春月劈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藤乙。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工猜揪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坛梁。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓而姐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親划咐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拴念,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容