C++基礎①命名空間結構體和引用

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

前言

在進行NDK開發(fā)的時候 , 我們使用的很多第三方庫 , 大多數(shù)都是使用的C/C++編寫的 , 有些可能是C和C++混編的 。如,我在NDK系列中提到的增量更新使用的兩個庫 bsdiffbzip2 。那么 , 我們在學完C語言之后 , 有必要研究一下C++,因為C++是C的拓展 , 加入了面向對象和模板技術 ,那么基本語法就不用介紹了。本系列假定你具有一定的編程經驗,對面向對象有一定的了解 。

命名空間

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

定義namespace

  /*
    cpp namespace demo
*/

#include <iostream>

/*
    自定義命名空間 , 相當于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

// 標準命名空間 (包含很多標準的定義)
using namespace std;

// use namespace
using namespace NSP_A;


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

    A a; 
    a.sayHello();

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

}

在C++中也定義了一些標準命名空間 , 如std ,C++中也兼容C語言語法 , 可以引入C語言頭文件,使用C標準函數(shù) 。

C++ 類 與 結構體

C++是面向對象語言 , 面向對象語言的一大特征就是可以將類型整合起來 , 可以創(chuàng)建類型實例 。

創(chuàng)建C++類

/*
    cpp class type
*/

#include <iostream>

using namespace std;

namespace CPP_CLASS
{
    class Animal {
    // C++ 共用權限訪問修飾符
    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ù)都是采用的共享權限修飾符 , 值得注意的是 , 在C++中 , 結構體里面的屬性和函數(shù)也具有權限訪問修飾符 。

/*
    CPP Struct
*/
namespace CPP_STRUCT
{
    // C++結構體與C結構不同之處在于 , 在C++中結構體內字段函數(shù)可以有權限修飾符,用法和類用法一致
    // 和類不同的是 , 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;
        }
    };
}

結構體和類最大的不同是 , 結構體不能繼承 , 不能進行抽象化。

使用C++類 與 結構體


/* 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++ 結構體的區(qū)別
*/
void useCppStruct() {

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

    p.showPersonInfo();

}

在C++中 , 使用類與使用結構體 , 用法并無二致 , 只是結構不能使用new而類可以使用 , new出來的是一個對象指針 。

引用

相信大家對引用并不陌生 , 在Java中 , 我們常常將對象變量叫做對象引用 , 在C++中也不例外 , C++中的引用也可以作為對象變量 , 但C++中的引用不會開辟新的空間 , 去存儲指向對象內存空間的地址值 , 而是作為對象引用的一個別名 。

簡單示意圖

引用

引用示例

/*
    CPP 引用 
*/

#include <iostream>

namespace CPP_QUOTE {

    class Quote {
    public:
        int x = 10;

        // 引用 ,就是傳入變量的別名,引用不會開辟新的內存空間,如同指針一樣,指向的是傳入變量的內存空間
        // 一般作為函數(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ù)參數(shù)中 , 充當指針用 。

引用使用


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

void useCppQuote() {

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

    q1.x = 100;

    printf("q的內存地址 : %#x , q1的內存地址:%#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;
}

打印對象的地址與引用變量的地址 , 我們會發(fā)現(xiàn)內存地址是一致 , 因為引用是變量的別名 , 不會創(chuàng)建新的內存空間。

結語

有了C語言基礎 , 學C++ , 只要掌握語法的差異性和一些C++的特性 , C++還是很容易上手的 , 基礎語法 , 需要動手練 , 多做實驗 , 慢慢就會熟能生巧 。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容