国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

嵌入式C++開發(fā)詳解(二)

2019-11-09 21:12:52
字體:
供稿:網(wǎng)友

面向?qū)ο缶幊蹋ㄒ唬?/strong>

一、面向?qū)ο缶幊探榻B

(一)什么是面向?qū)ο螅?/strong>

      面向?qū)⑾到y(tǒng)看成通過交互作用來完成特定功能的對象的集合。每個對象用自己的方法來管理數(shù)據(jù)。也就是說只有對象內(nèi)部的代碼能夠操作對象內(nèi)部的數(shù)據(jù)。

(二)面向?qū)ο蟮膬?yōu)點

 ·面向過程的缺點

不容易維護,靈活性差,不容易擴展,更談不上復(fù)用,由于客戶的需求多變,導(dǎo)致程序員加班加點,甚至整個項目經(jīng)常返工。

·面向?qū)ο蟮膬?yōu)點

通過繼承、封裝、多態(tài)降低程序的耦合度,并結(jié)合設(shè)計模式讓程序更容易修改和擴展,并且容易復(fù)用。

(三)面向?qū)ο蟮奶攸c

抽象、封裝、繼承、多態(tài)

1.抽象:

·抽象是人們認識事物的一種方法

·抓住事物本質(zhì),而不是內(nèi)部具體細節(jié)或者具體實現(xiàn)

2.封裝

·封裝是指按照信息屏蔽的原則,把對象的屬性和操作結(jié)合一起,構(gòu)成獨立的對象。

·通過限制對屬性和操作的訪問權(quán)限,可以將屬性“隱藏”在對象內(nèi)部,對外提供一定的接口,在對象之外只能通過接口對對象進行操作。

·封裝性增加了對象的獨立性,從而保證數(shù)據(jù)的可靠性。

·外部對象不能直接對操作對象的屬性,只能使用對象提供的服務(wù)。

3.繼承

·繼承表達了對對象的一般與特殊的關(guān)系。特殊類的對象具有一般類的全部屬性和服務(wù)。

·當(dāng)定義了一個類后,又需定義一個新類,這個新類與原來的類相比,只是增加或修改了部分屬性和操作,這時可以用原來的類派生出新類,新類中只需描述自己所特有的屬性和操作。

·繼承性大大簡化了對問題的描述,大大提高了程序的可重用性,從而提高了程序設(shè)計、修改、擴充的效率等。

4.多態(tài)

·多態(tài)性:同一個消息被不同對象接收時,產(chǎn)生不同結(jié)果,即實現(xiàn)同一接口,不同方法。

·一般類中定義的屬性和服務(wù),在特殊類中不改變其名字,但通過各自不同的實現(xiàn)后,可以具有不同的數(shù)據(jù)類型或者具有不同的行為。

 

當(dāng)向圖形對象發(fā)送消息進行繪圖服務(wù)請求后,圖形對象會自動判斷自己的所屬類然后執(zhí)行相應(yīng)的繪圖服務(wù)。

總結(jié):面向?qū)ο缶幊痰膬?yōu)缺點

面向?qū)ο缶幊痰膬?yōu)點:

·易維護:可讀性高,即使改變需求,由于繼承的存在,維護也只是在局部模塊,維護起來是非常方便和較低成本的。

·質(zhì)量高:可重用現(xiàn)有的,在以前的項目的領(lǐng)域中已被測試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高質(zhì)量。

·效率高:在軟件開發(fā)時,根據(jù)設(shè)計的需要對現(xiàn)實世界的事物進行抽象,產(chǎn)生類。這樣的方法解決問題,接近于日常生活和自然的思考方式,勢必提高軟件開發(fā)的效率和質(zhì)量

·易擴展:由于繼承、封裝、多態(tài)的特性,自然設(shè)計出高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),使得系統(tǒng)更靈活、更容易擴展,而且成本較低。

面向?qū)ο缶幊痰娜秉c:

運行效率會下降10%左右

二、類與對象

(一)類的聲明

//類是一種用戶自定義類型,聲明形式:

class 類名稱

{

public:

公有成員(外部接口)

PRivate:

私有成員

protected:

保護成員

};

例:

#include <iostream> using namespace std; class Test{public:int x_;protected:int y_;private:int z_;}; int main(){Test t;t.x_ = 5;t.y_ = 6; //Error!不可訪問t.z_ = 7; //Error1不可訪問 cout << "t.x: " << t.x_ << endl;return 0;}

升級版:

#include <iostream> using namespace std; class Test{public:int x_;void setX(int x){x_ = x;}void setY(int y){y_ = y;}void setZ(int z){z_ = z;}int getX(){return x_;}int getY(){return y_;}int getZ(){return z_;}protected:int y_;private:int z_;}; int main(){Test t;t.x_ = 5; cout << "t.x: " << t.x_ << endl;cout << "t.y: " << t.getY() << endl;cout << "t.z: " << t.getZ() << endl;return 0;}

編譯結(jié)果:

 

PS:y,z未進行初始化所以是亂碼。

(二)public、private、protected

·在關(guān)鍵字public后面聲明,它們是類與外部的接口,外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù)。

·在關(guān)鍵詞private后面聲明,只允許本類中的函數(shù)訪問,而類外部的任何函數(shù)都不能訪問。

·在關(guān)鍵詞protected后面聲明,與private類似,其差別表現(xiàn)在繼承與派生時對派生類的影響不同。

(三)成員函數(shù)

 1.類內(nèi)實現(xiàn)成員函數(shù)

   函數(shù)類內(nèi)實現(xiàn)默認為inline函數(shù),占用空間,所有一般類外實現(xiàn)函數(shù)

   上述例題中函數(shù)為類內(nèi)實現(xiàn)

 2.類外實現(xiàn)成員函數(shù)

   例:

 

  Test.h    #ifndef _TEST_H_    #define _TEST_H_    class Test    {    public:    int x_;     void initXYZ(int x, int y, int z);    void display();     protected:    int y_;    private:    int z_;    };#endifTest.c:    #include "Test.h"    #include <iostream>     using namespace std;     void Test::initXYZ(int x, int y, int z)    {    x_ = z;    y_ = y;    z_ = x;    }     void Test::display()    {    cout << "x:" << x_ << "/t" << "y:" << y_ << "/t" << "x:" << z_ << "/t" << endl;    }lei.c:#include <iostream>#include "Test.h" using namespace std; int main(){Test t; t.initXYZ(1, 2, 3);t.display(); return 0;}

運行結(jié)果:

 

 3.成員函數(shù)的重載及默認參數(shù)

(四)class VS struct

class數(shù)據(jù)成員默認私有

struct數(shù)據(jù)成員默認公有

例:

#include <iostream> using namespace std; class Test{public:int x_;int y_;int z_;};struct Test1{int x_;int y_;int z_; void initXYZ(int x, int y, int z){x_ = x;y_ = y;z_ = z;}};int main(){Test t1;t1.x_ = 5; Test1 t2;t2.initXYZ(1, 2, 3); cout << "t1:" << t1.x_ << endl;cout << "t2:" << t2.x_ << endl; cout << sizeof(t1) << endl;cout << sizeof(t2) << endl; return 0;        }

運行結(jié)果:

    

C++編譯器對struct升級:

     在結(jié)構(gòu)體內(nèi)可以加入函數(shù)

由運行結(jié)果可知:

·類的大小與成員函數(shù)無關(guān),只與成員有關(guān)

·對齊方式與大小與結(jié)構(gòu)體一樣

·對象的大小由成員決定

·方法是共享的

(五)對象的存儲類型

  

代碼驗證:

#include <iostream>using namespace std; class Test{private:int x_;int y_;int z_;public:void initXYZ(int x, int y, int z){this->x_ = x;this->y_ = y;this->z_ = z;}};int main(){Test *t1 = new Test();t1->initXYZ(1, 2, 4); return 0;}

調(diào)試結(jié)果:

 

(六)類的作用域

前向聲明:只能定義指針或者引用,不能有另一個類的對象

代碼示例:

 

   A.h#ifndef _A_H_#define _A_H_ class B;//前向聲明 class A{public:A();~A();private:B *b;  //B &b};#endifB.h#ifndef _B_H_#define _B_H_ class B{public:B();~B();};#endifA.cpp#include "A.h"#include <iostream> using namespace std; A::A(){cout << "init A!" << endl;}A::~A(){cout << "destory A!" << endl;}B.cpp#include "B.h"#include <iostream> using namespace std; B::B(){cout << "init B!" << endl;}B :: ~B(){cout << "destory B!" << endl;}main.c#include <iostream>#include "A.h"#include "B.h" int main(){return 0;}

編譯結(jié)果:

 

(七)嵌套類(內(nèi)部類)

     ·從作用域的角度看,嵌套類被隱藏在外圍類中,該類名只能在外圍類中使用。如果

       在外圍類的作用域使用該類名時,需要加名字限定

     ·嵌套類中的成員函數(shù)可以在它的類體外定義

     ·嵌套類的成員函數(shù)對外圍類的成員沒有訪問權(quán),反之亦然。

     ·嵌套類僅僅只是語法上的嵌入

(八)局部類

     ·類也可以定義在函數(shù)體內(nèi),這樣的類被稱為局部類(local class)。局

       部類只在定義它的局部域內(nèi)可見

     ·局部類的成員函數(shù)必須被定義在類體中。

     ·局部類中不能有靜態(tài)成員

   代碼示例:

#include <iostream> using namespace std; class Test{public:    int x_;     class Inner   //嵌套類    {    public:        int num; void func();     };        void setX(int x)    {        x_ = x;display();    }     void setY(int y)    {y_ = y;display();    }     void setZ(int z)    {        z_ = z;    }     int getX()    {        return x_;    }     int getY()    {        return y_;    }     int getZ()    {        return z_;    } protected:    int y_;     void display()    {       cout << x_ << y_ << z_ << endl;    } private:    int z_;}; void Test::Inner::func(){    cout << "hello world" << endl;} int main() {    class LocalClass    //局部類    {        void func(){ }    }        Test t;     Test::Inner n;     t.x_ = 6;    t.setY(6);    t.setZ(7);     cout << "t.y_ = " << t.getY() << endl;    cout << "t.z_ = " << t.getZ() << endl;       cout << "t.x_ = " << t.x_ << endl;        return 0;}

 

 

 

 

 

 

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 砀山县| 砀山县| 沂南县| 凉山| 八宿县| 东明县| 鞍山市| 蒙山县| 乡城县| 永济市| 梨树县| 双鸭山市| 武冈市| 威信县| 理塘县| 沅陵县| 叙永县| 晋江市| 睢宁县| 达州市| 霍林郭勒市| 武穴市| 安国市| 龙游县| 萨嘎县| 昔阳县| 砀山县| 临安市| 惠州市| 东莞市| 济南市| 南昌县| 信阳市| 呼和浩特市| 崇文区| 内江市| 佛冈县| 台北县| 侯马市| 汪清县| 平陆县|