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

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

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

2019-11-10 16:48:22
字體:
來源:轉載
供稿:網友

面向對象編程(一)

一、面向對象編程介紹

(一)什么是面向對象?

      面向將系統看成通過交互作用來完成特定功能的對象的集合。每個對象用自己的方法來管理數據。也就是說只有對象內部的代碼能夠操作對象內部的數據。

(二)面向對象的優點

 ·面向過程的缺點

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

·面向對象的優點

通過繼承、封裝、多態降低程序的耦合度,并結合設計模式讓程序更容易修改和擴展,并且容易復用。

(三)面向對象的特點

抽象、封裝、繼承、多態

1.抽象:

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

·抓住事物本質,而不是內部具體細節或者具體實現

2.封裝

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

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

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

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

3.繼承

·繼承表達了對對象的一般與特殊的關系。特殊類的對象具有一般類的全部屬性和服務。

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

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

4.多態

·多態性:同一個消息被不同對象接收時,產生不同結果,即實現同一接口,不同方法。

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

 

當向圖形對象發送消息進行繪圖服務請求后,圖形對象會自動判斷自己的所屬類然后執行相應的繪圖服務。

總結:面向對象編程的優缺點

面向對象編程的優點:

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

·質量高:可重用現有的,在以前的項目的領域中已被測試過的類使系統滿足業務需求并具有較高質量。

·效率高:在軟件開發時,根據設計的需要對現實世界的事物進行抽象,產生類。這樣的方法解決問題,接近于日常生活和自然的思考方式,勢必提高軟件開發的效率和質量

·易擴展:由于繼承、封裝、多態的特性,自然設計出高內聚、低耦合的系統結構,使得系統更靈活、更容易擴展,而且成本較低。

面向對象編程的缺點:

運行效率會下降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;}

編譯結果:

 

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

(二)public、private、protected

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

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

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

(三)成員函數

 1.類內實現成員函數

   函數類內實現默認為inline函數,占用空間,所有一般類外實現函數

   上述例題中函數為類內實現

 2.類外實現成員函數

   例:

 

  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;}

運行結果:

 

 3.成員函數的重載及默認參數

(四)class VS struct

class數據成員默認私有

struct數據成員默認公有

例:

#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;        }

運行結果:

    

C++編譯器對struct升級:

     在結構體內可以加入函數

由運行結果可知:

·類的大小與成員函數無關,只與成員有關

·對齊方式與大小與結構體一樣

·對象的大小由成員決定

·方法是共享的

(五)對象的存儲類型

  

代碼驗證:

#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;}

調試結果:

 

(六)類的作用域

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

代碼示例:

 

   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;}

編譯結果:

 

(七)嵌套類(內部類)

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

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

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

     ·嵌套類的成員函數對外圍類的成員沒有訪問權,反之亦然。

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

(八)局部類

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

       部類只在定義它的局部域內可見

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

     ·局部類中不能有靜態成員

   代碼示例:

#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;}

 

 

 

 

 

 

 


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

圖片精選

主站蜘蛛池模板: 古浪县| 文水县| 南涧| 万宁市| 禹州市| 于都县| 东乌珠穆沁旗| 定日县| 平度市| 西畴县| 长顺县| 大方县| 湟源县| 稻城县| 苍梧县| 于都县| 景泰县| 石渠县| 喀喇| 金昌市| 葵青区| 辽源市| 南部县| 健康| 肥西县| 斗六市| 洪洞县| 绩溪县| 乌审旗| 浮山县| 裕民县| 夏河县| 丹寨县| 通江县| 松溪县| 睢宁县| 宁波市| 云安县| 禹城市| 和平区| 长治县|