国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】

這篇具有很好參考價值的文章主要介紹了C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開始課程:P11 1_1. this指針
課程鏈接:程序設計與算法(三)C++面向對象程序設計 北京大學 郭煒
課程PPT:github提供的對應課程PPT

1、this指針

C++是沒有自身編譯器的,需要使用C語言的編譯器,所以C++在編譯時需要把語言轉換為對應的C語言。

實例1:C++程序到C程序的翻譯:(下圖好理解,不做解釋)

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

1.1、this指針的作用

this指針的作用:指向成員函數(shù)所作用的對象。
非靜態(tài)成員函數(shù)中可以直接使用this來代表指向該函數(shù)
作用的對象的指針。

實例2:

#include<iostream>

class Complex
{
    public:
        double real, imag;
        void Print()
        {
            std::cout << real << "," << imag;
        }
        Complex(double r, double i): real(r), imag(i)
        {     }
        Complex AddOne()
        {
            this -> real++;   // 等價于 real++
            this -> Print();  // 等價于 Print()
            return * this;    // 返回this指:代表返回修改對象的自身
        }
};

int main ()
{
    Complex c1(1, 1), c2(0, 0);
    c2 = c1.AddOne();   // 這里就用到了return * this;
    return 0;
}
// OUT
2,1

實例3:

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++
實例4:

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

1.2、this指針和靜態(tài)成員函數(shù)

靜態(tài)成員函數(shù)中不能使用 this 指針!因為靜態(tài)成員函數(shù)并不具體作用與某個對象! 因此,靜態(tài)成員函數(shù)的真實的參數(shù)的個數(shù),就是程序中寫出的參數(shù)個數(shù)!

2、靜態(tài)成員變量和靜態(tài)成員函數(shù)

2.1、基本概念

靜態(tài)成員:在說明前面加了static關鍵字的成員。
定義:普通成員變量每個對象有各自的一份,而靜態(tài)成員變 量一共就一份,為所有對象共享。

  • 普通成員要量、函數(shù):對于無一TCRectangle對象來說都是單獨一份的,每個對象之間相互不干擾。
  • 靜態(tài)成員變量或函數(shù):對于每一個CRectangle對象之間是共享的,更改其中一個CRectangle對象的靜態(tài)成員變量或函數(shù),其他CRectangle對象的靜態(tài)成員變量和函數(shù)也隨之改變。

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

  • 普通成員變量每個對象有各自的一份,而靜態(tài)成員變量一共就一份,為所有對象共享。

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

2.2、基本概念總結

  • 普通成員變量每個對象有各自的一份,而靜態(tài)成員變量一共就一份,為所有對象共享。
  • 普通成員函數(shù)必須具體作用于某個對象,而靜態(tài)成員函數(shù)并不具體作用與某個對象。
  • 因此靜態(tài)成員不需要通過對象就能訪問
  • 靜態(tài)成員變量本質上是全局變量,哪怕一個對象都不存在,類的靜態(tài)成員變量也存在。
  • 靜態(tài)成員函數(shù)本質上是全局函數(shù)。
  • 設置靜態(tài)成員這種機制的目的是將和某些類緊密相關的全局變
    量和函數(shù)寫到類里面,看上去像一個整體,易于維護和理解。

2.3、如何訪問靜態(tài)成員

1、類名::成員名

Cectangle::PrintTotal();

2、對象.成員名

Cectangle r;
r.PrintToTal();

3、指針->成員名

Cectangle * p = & r;
p -> PrintTotal();

4、引用.成員名

Cectangle & ref = r;
int n = ref.nTotalNumber;

2.4、靜態(tài)成員變量的使用場景(重要)

靜態(tài)成員變量的作用:考慮一個需要隨時知道矩形總數(shù)和總面積的圖形處理程序,可以用全局變量來記錄總數(shù)和總面積,用靜態(tài)成員將這兩個變量封裝進類中,就更容易理解和維護

注意事項1:必須在定義類的文件中對靜態(tài)成員變量進行一次聲明,聲明的同時可以初始化,也可以不出初始化。

實例:

#include<iostream>

class CRectangle
{
    private:
        int w, h;
        static int nTotalArea;
        static int nTotalNumber;
    public:
        CRectangle(int w_,int h_);
        ~CRectangle();
        static void PrintTotal(); 
};

CRectangle::CRectangle(int w_, int h_)
{
    w = w_;
    h = h_;
    nTotalNumber ++;
    nTotalArea += w * h;
}

CRectangle::~CRectangle()
{
    nTotalNumber --;
    nTotalArea -= w * h;
}

void CRectangle::PrintTotal()
{
    std::cout << "nTotalNumber = " << nTotalNumber << ";" << "nTotalArea = " << nTotalArea << std::endl;
}

// 注意事項:必須在定義類的文件中對靜態(tài)成員變量進行一次聲明
// 或初始化。否則編譯能通過,鏈接不能通過。
int CRectangle::nTotalNumber = 0;   // 聲明的同時可以初始化,也可以不出初始化
int CRectangle::nTotalArea = 0;

int main()
{
    CRectangle r1(3,3), r2(2,2);
    //cout << CRectangle::nTotalNumber; // Wrong , 私有
    CRectangle::PrintTotal();   // 輸出:nTotalNumber = 2;nTotalArea = 13
    r1.PrintTotal();            // 輸出:nTotalNumber = 2;nTotalArea = 13
    r2.PrintTotal();            // 輸出:nTotalNumber = 2;nTotalArea = 13
    return 0;
}

// OUT
nTotalNumber = 2;nTotalArea = 13
nTotalNumber = 2;nTotalArea = 13
nTotalNumber = 2;nTotalArea = 13

注意事項2:在靜態(tài)成員函數(shù)中,不能訪問非靜態(tài)成員變量,也不能調用非靜態(tài)成員函數(shù)。
C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

2.5、2.4節(jié)中CRectangle類寫法,有何缺陷?

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++
解決辦法:為CRectangle類寫一個復制構造函數(shù)
C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

3、成員對象和封閉類

封閉類: 一個類的成員變量是另一個類的對象包含,此成員對象的類叫封閉類 (Enclosing)

#include<iostream>
class CTyre 
{ 
    //輪胎類
    private:
        int radius; //半徑 
        int width; //寬度
    public:
        CTyre(int r, int w):radius(r), width(w) { }
};
class CEngine   // 這個類什么都沒寫,有無參構造函數(shù)
{ 
    //引擎類
};

class CCar 
{ 
    //汽車類 “封閉類”
    private:
        int price; //價格
        CTyre tyre;
        CEngine engine;   // 不用初始化,有無參構造函數(shù)
    public:
        CCar(int p, int tr, int tw);  // 構造函數(shù)的聲明
};
CCar::CCar(int p, int tr, int w)  // 構造函數(shù)的定義
:price(p), tyre(tr, w)   // 構造函數(shù)的初始化:初始化列表
{
};
int main()
{
    CCar car(20000,17,225); 
    return 0;
}

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

3.1、封閉類構造函數(shù)的初始化列表

1、定義封閉類的構造函數(shù)時,添加初始化列表
類名::構造函數(shù)(參數(shù)表):成員變量1(參數(shù)表),成員變量2(參數(shù)表), …
{

}

2、成員對象初始化列表中的參數(shù)

  • 任意復雜表達式
  • 函數(shù) / 變量 / 表達式中的函數(shù),變量有定義

3.2、封閉類構造函數(shù)和析構函數(shù)調用順序

C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】,C++,c++

實例:

#include<iostream>
using namespace std;

class CTyre {
    public:
        CTyre() { cout << "CTyre contructor" << endl; }
        ~CTyre() { cout << "CTyre destructor" << endl; }
};
class CEngine {
    public:
        CEngine() { cout << "CEngine contructor" << endl; }
        ~CEngine() { cout << "CEngine destructor" << endl; }
};
 
class CCar {
    private:
        CEngine engine;
        CTyre tyre;
    public:
        CCar( ) { cout << "CCar contructor" << endl; }
        ~CCar() { cout << "CCar destructor" << endl; }
};

int main()
{
    CCar car; 
    return 0;
}

// OUT
CEngine contructor
CTyre contructor
CCar contructor
CCar destructor
CTyre destructor
CEngine destructor

3.3、封閉類的復制構造函數(shù)(難理解)

#include<iostream>

class A
{
    public:
        A() 
        { 
            std::cout << "default" << std::endl;
        }
        A(A & a)
        {
            {std::cout << "copy" << std::endl;}
        }
};
 
// 封閉類
class B 
{
    A a;
};

int main()
{
    B b1, b2(b1);  // b1調用了B類的自動生成的無參構造函數(shù),b2調用了B類的自動生成的復制構造函數(shù)
    return 0;
}
// OUT
default
Copy

輸出:default、Copy
說明b2.a是用類A的復制構造函數(shù)初始化的。而且調用復制構造函數(shù)時的實參就是b1.a。文章來源地址http://www.zghlxwxcb.cn/news/detail-836824.html

到了這里,關于C++面向對象程序設計-北京大學-郭煒【課程筆記(四)】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C++面向對象程序設計 - 類和對象進一步討論

    C++面向對象程序設計 - 類和對象進一步討論

    ? ? ? ? 在C++中,關于面向對象程序設計已經講了很大篇幅,也例舉很多案例,此篇將通過一些習題來進一步了解對象、靜態(tài)成員、指針、引用、友元、類模板等等相關知識。 ? ? ? ? 示例代碼: ? ? ? ? 如上代碼,運行后結果如下圖: ???????? 現(xiàn)在將上述代碼中,第

    2024年04月16日
    瀏覽(24)
  • 面向對象程序設計

    【面向對象程序設計】(OOP)與【面向過程程序設計】在思維方式上存在著很大的差別?!久嫦蜻^程程序設計】中,算法是第一位的,數(shù)據(jù)結構是第二位的,這就明確地表述了程序員的工作方式。首先要確定如何操作數(shù)據(jù),然后再決定如何組織數(shù)據(jù),以便于數(shù)據(jù)操作。而【面

    2023年04月13日
    瀏覽(31)
  • Java面向對象程序設計實驗報告(實驗二 面向對象基礎練習)

    Java面向對象程序設計實驗報告(實驗二 面向對象基礎練習)

    ?? 作者: 命運之光? ?? 專欄:Java面向對象程序設計實驗報告 目錄 ?一、需求設計 ?二、概要設計 ?三、詳細設計 ?四、調試結果 ?五、測試結果 ?附錄:源程序代碼(帶注釋) 測試類demo2 Address類 Employee類 實驗二?面向對象基礎練習 實驗環(huán)境: Eclipse+JDK 實驗目的:

    2024年02月06日
    瀏覽(32)
  • Kotlin程序設計(二)面向對象

    Kotlin程序設計(二)面向對象

    我們在前面已經學習了Kotlin程序設計的基礎篇,本章我們將繼續(xù)介紹更多Kotlin特性,以及面向對象編程。 其實函數(shù)我們在一開始就在使用了: 我們程序的入口點就是 main 函數(shù),我們只需要將我們的程序代碼編寫到主函數(shù)中就可以運行了,不過這個函數(shù)只是由我們來定義,而

    2024年02月01日
    瀏覽(23)
  • Python-基礎篇-類與對象/面向對象程序設計

    Python-基礎篇-類與對象/面向對象程序設計

    “類”是物以類聚的 “類” 類 和 對象 是 面向對象編程的 兩個 核心概念 類 是對一群具有 相同 特征 或者 行為 的事物的一個統(tǒng)稱,是抽象的, 不能直接使用 特征 被稱為 屬性 行為 被稱為 方法 類 就相當于制造飛機時的 圖紙 ,是一個 模板 ,是 負責創(chuàng)建對象的 定義類??

    2024年01月19日
    瀏覽(62)
  • 面向對象程序設計第三次bolg

    面向對象程序設計第三次bolg

    本次博客針對面向對象程序設計的課程所發(fā)的PTA作業(yè)7,8以及期末考試中的面向對象編程題的分析和總結,重點介紹課程成績統(tǒng)計程序系列題目以及期末考試的編程題。 在這次作業(yè)中7-1、7-2內容和考點相同,在此我分析一下7-2Hashmap的排序這個問題。 7-2 容器-HashMap-排序 分數(shù)

    2024年02月05日
    瀏覽(25)
  • 2023.5.5 面向對象程序設計實驗報告

    實驗項目名稱:模板 1、熟練掌握函數(shù)模板和類模板的定義格式。 2、熟練運用函數(shù)模板和類模板解決實際問題。 1、復數(shù)類Complex有兩個數(shù)據(jù)成員:a和b, 分別代表復數(shù)的實部和虛部,并有若干構造函數(shù)和一個重載-(減號,用于計算兩個復數(shù)的距離)的成員函數(shù)。 要求設計一個

    2024年02月02日
    瀏覽(26)
  • 面向對象程序設計 之 文件輸入輸出流

    面向對象程序設計 之 文件輸入輸出流

    石 家 莊 鐵 道 大 學 實 驗 報 告 課程名稱 面向對象程序設計 班級 ? 姓名 ? 學號 ? 實驗日期 2023.5.16 評分 100 ? 實驗項目名稱:輸入輸出流 一、實驗目的 掌握文本文件和二進制文件的基本訪問方法; 了解一般I/O流和文件流的關系;了解文件與文件流的關系; 了解文件系統(tǒng)

    2024年02月05日
    瀏覽(41)
  • 【面向對象程序設計】賬戶類(Java、JavaFX)

    目錄 版本1: 設計Account1類,包含: 設計測試類ATMMachine1: 版本2: 擴展Account1類為Account2類: ? 設計測試類ATMMachine2,其主菜單如下: 版本3: uml啥的找不到了,太久遠了,有什么不懂得評論或者私聊問我吧。 ■ 一個名為id 的int 類型的私有數(shù)據(jù)域(默認值為0),長度為6位

    2024年02月08日
    瀏覽(19)
  • 面向對象程序設計——多文檔綜合性試驗

    面向對象程序設計——多文檔綜合性試驗

    1)創(chuàng)建一個多文檔應用程序MyMdi,可以在這個多文檔中可以輸入文本、顯示靜態(tài)圖、動態(tài)圖以及顯示對話框進行操作。 2)第一個視圖類的基類為CEditView(CView的子類),可以錄入字符串。 3)第二個文檔畫出靜態(tài)圖,包括五種以上圖形。 4)在第二個文檔菜單欄“畫圖”中點

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包