• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    “C++面向?qū)ο蟪绦蛟O(shè)計”教學方法探討

    2015-03-07 14:14:41杜青
    電腦知識與技術(shù) 2015年34期
    關(guān)鍵詞:面向?qū)ο?/a>程序設(shè)計教學方法

    杜青

    摘要:“C++面向?qū)ο蟪绦蛟O(shè)計”課程涉及了很多的知識點,學生很難在短時間內(nèi)掌握面向?qū)ο蟪绦蛟O(shè)計的核心思想。為此介紹了在該門課程教學中采用的教學方法,對課程中重要的知識點如類的概念、類的繼承機制等內(nèi)容,通過例題詳細闡述;對于難點問題,如構(gòu)造函數(shù)、運算符重載等,通過例題分步驟進行講解,由淺入深,使學生盡快理解和掌握。這種教學方式在該門課程的教學中加以應(yīng)用,取得了較好的效果。

    關(guān)鍵詞:C++;面向?qū)ο螅怀绦蛟O(shè)計;類;教學方法

    中圖分類號: TP311 文獻標識碼:A 文章編號:1009-3044(2015)34-0118-03

    Abstract: There are lots of knowledge points included in the course, C++ Object-Oriented programming, which makes it hard for students to grasp the key ideas of it. This paper introduces the teaching methods in the course to elaborates the key points like classes and their inheritance mechanism, and explains the difficult points like constructors, operators, etc step by step by focusing on examples, which facilitates the comprehension of students. This teaching method has been successfully applied in the course, and a good result has been obtained.

    Key words: C++; object-oriented; programming; classes; teaching methods

    1 概述

    “C++面向?qū)ο蟪绦蛟O(shè)計”是計算機專業(yè)學生一門重要的專業(yè)基礎(chǔ)課,學生在掌握C++結(jié)構(gòu)化程序設(shè)計的基礎(chǔ)上,通過這門課程的學習,進一步掌握C++面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)知識。

    由于“C++面向?qū)ο蟪绦蛟O(shè)計”涉及的知識點非常多,初學者很難在短時間內(nèi)領(lǐng)會面向?qū)ο蟪绦蛟O(shè)計的核心思想,在面對實際問題時,難以用面向?qū)ο蟪绦蛟O(shè)計的方法構(gòu)建出合理的程序框架。

    因此在“C++面向?qū)ο蟪绦蛟O(shè)計”課程的教學中,需要抓住重點,理清難點。對類的概念、繼承的機制等關(guān)鍵知識點著重闡述,使學生掌握面向?qū)ο蟪绦虻幕窘Y(jié)構(gòu);針對難點問題,如構(gòu)造函數(shù)與運算符重載等,結(jié)合具體實例,由淺入深進行分析,使學生掌握面向?qū)ο蟪绦蛟O(shè)計的基本方法。

    2 建立類的概念

    類的概念是面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ),體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的兩大特性,即抽象性與封裝性。

    在進行結(jié)構(gòu)化程序設(shè)計時,根據(jù)題目要求,先設(shè)計函數(shù),再在主函數(shù)中定義變量,存放原始數(shù)據(jù),之后調(diào)用函數(shù)進行處理操作,最后輸出結(jié)果。

    在進行面向?qū)ο蟪绦蛟O(shè)計時,要先根據(jù)題目要求設(shè)計類,再在主函數(shù)中定義類對象,存放待處理數(shù)據(jù),接著調(diào)用類的成員函數(shù)實現(xiàn)處理操作并輸出結(jié)果。

    因此類的設(shè)計是進行面向?qū)ο蟪绦蛟O(shè)計的關(guān)鍵步驟。在介紹類的設(shè)計時,先從一個簡單的類——學生類入手,使學生對類的概念有一個初步的了解。在此基礎(chǔ)上,再將一些C++結(jié)構(gòu)化程序設(shè)計的經(jīng)典例題,如求給定范圍素數(shù)、一維數(shù)組應(yīng)用、二維數(shù)組應(yīng)用等,改用面向?qū)ο蟪绦蛟O(shè)計的方法去實現(xiàn),使學生進一步了解類的設(shè)計過程,能夠根據(jù)題目要求,確定類中的數(shù)據(jù)成員及成員函數(shù),從而掌握類設(shè)計的基本方法。

    在完成類設(shè)計的基礎(chǔ)上,進一步掌握類的應(yīng)用,即定義類對象和調(diào)用類的成員函數(shù),從而掌握面對象程序設(shè)計的基本步驟。

    3 理解類的繼承機制

    類的繼承性是面向?qū)ο蟪绦蛟O(shè)計的重要特性。通過類的繼承機制,實現(xiàn)了軟件代碼的重用。

    在講述單繼承時,先通過簡單的例題,例如學生類,介紹單繼承的概念,繼承的方式,派生類從基類繼承成員的訪問屬性,以及在派生類中如何新增成員和改寫基類已有的成員,派生類構(gòu)造函數(shù)及析構(gòu)函數(shù)的執(zhí)行過程。

    再通過較復雜的例題,例如圖形類,進一步介紹如何根據(jù)題目要求,設(shè)計基類及派生類,如何確定基類及派生類的數(shù)據(jù)成員及成員函數(shù),如何定義基類及派生類的構(gòu)造函數(shù)等。

    在講述多重繼承時,通過簡單的例題,例如家具類,介紹多重繼承的概念,繼承的方式,派生類構(gòu)造函數(shù)及析構(gòu)函數(shù)的執(zhí)行過程,多重繼承的二義性問題以及二義性問題的解決方法——虛擬繼承等。

    由于給出具體實例,使學生對復雜的繼承機制有了直觀的了解,在解決實際問題時,能夠根據(jù)要求,建立基類,并由基類派生子類,實現(xiàn)軟件代碼的復用。

    4 難點問題的分析

    C++面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)知識中有一些概念比較復雜,難以理解??梢酝ㄟ^一些簡單的例題,分步驟說明概念的含義,提高學生對復雜概念的理解能力。

    4.1 類對象的初始化

    定義類對象時,會自動調(diào)用類的構(gòu)造函數(shù)實現(xiàn)類對象的初始化。構(gòu)造函數(shù)的概念中,復制構(gòu)造函數(shù)、類繼承中構(gòu)造函數(shù)的執(zhí)行過程,是構(gòu)造函數(shù)概念的難點。

    4.1.1復制構(gòu)造函數(shù)

    復制構(gòu)造函數(shù)可以將一個已有對象的值賦給一個新對象。如不定義復制構(gòu)造函數(shù),系統(tǒng)提供默認的復制構(gòu)造函數(shù),而默認復制構(gòu)造函數(shù)只能實現(xiàn)淺復制,如要實現(xiàn)深復制,就需要自定義復制構(gòu)造函數(shù)。

    在講述復制構(gòu)造函數(shù)時,先通過學生類例題,分析復制構(gòu)造函數(shù)的特點,以及調(diào)用復制構(gòu)造函數(shù)的各種情況,再修改類中的普通構(gòu)造函數(shù),在該函數(shù)中申請一定的內(nèi)存資源。通過查看運行結(jié)果中的錯誤,分析出現(xiàn)錯誤的原因及解決的辦法,之后修改已有的復制構(gòu)造函數(shù),增加代碼,實現(xiàn)深復制,最終程序能夠正常運行。通過一系列的分析,學生知道了在什么情況下需要實現(xiàn)深復制,以及實現(xiàn)深復制的方法,加深了對概念的理解和記憶。

    學生類例題的主要代碼如下。

    class Student

    {public:

    Student(long nu=0,char na[]="noname"):num(nu)

    { name=new char[20]; strcpy(name,na); }

    Student(const Student& s):num(s.num) //復制構(gòu)造函數(shù)定義

    { name=new char[20]; strcpy(name,s.name);} //實現(xiàn)深復制

    void show()

    { cout

    long num;

    char *name;

    };

    void func(Student st3) //按值傳遞參數(shù)時調(diào)用復制構(gòu)造函數(shù)

    { st3.show();}

    int main()

    { Student st1(1001,"Zhang"),st2(st1); //定義對象時調(diào)用復制構(gòu)造函數(shù)

    st2.show(); func(st2); return 0;}

    4.1.2 類繼承時構(gòu)造函數(shù)的執(zhí)行過程

    定義派生類對象時,自動調(diào)用派生類的構(gòu)造函數(shù)。由于存在單繼承、多重繼承、虛擬繼承以及對象數(shù)據(jù)成員等多種情況,分析類繼承時構(gòu)造函數(shù)的執(zhí)行過程,需要分以下5種情況,通過例題分別加以討論。

    ⑴ 單繼承時派生類構(gòu)造函數(shù)的執(zhí)行過程

    在學生類例題中,使學生類派生出大學生類,再定義大學生類對象,通過查看運行結(jié)果,使學生看到基類構(gòu)造函數(shù)及派生類構(gòu)造函數(shù)的執(zhí)行順序,進而介紹當基類構(gòu)造函數(shù)帶有參數(shù)時,派生類構(gòu)造函數(shù)如何向它傳遞實際參數(shù)。

    ⑵ 單繼承時派生類中有對象數(shù)據(jù)成員時構(gòu)造函數(shù)的執(zhí)行過程

    在大學生類中,增加對象數(shù)據(jù)成員,即教師類對象,通過該例題,使學生看到定義派生類對象時,基類構(gòu)造函數(shù)、對象成員構(gòu)造函數(shù)、派生類構(gòu)造函數(shù)的執(zhí)行順序,進而介紹派生類構(gòu)造函數(shù)如何向?qū)ο髷?shù)據(jù)成員的構(gòu)造函數(shù)傳遞實際參數(shù)。

    ⑶ 多重繼承時派生類構(gòu)造函數(shù)的執(zhí)行過程

    通過家具類例題,使學生看到定義派生類對象時,多個基類構(gòu)造函數(shù)以及派生類構(gòu)造函數(shù)的執(zhí)行順序。

    ⑷ 虛擬繼承時派生類構(gòu)造函數(shù)的執(zhí)行過程

    通過家具類例題,使學生看到定義派生類對象時,虛基類及直接基類構(gòu)造函數(shù)、派生類構(gòu)造函數(shù)的執(zhí)行順序,進而介紹派生類構(gòu)造函數(shù)如何向虛基類構(gòu)造函數(shù)傳遞實際參數(shù)。

    ⑸ 多重繼承時既有虛擬繼承也有非虛擬繼承時派生類構(gòu)造函數(shù)的執(zhí)行過程

    通過例題,使學生看到定義派生類對象時,虛基類、非虛基類構(gòu)造函數(shù)以及派生類構(gòu)造函數(shù)的執(zhí)行順序。

    通過以上分步驟講解,使學生對比較復雜的構(gòu)造函數(shù)的執(zhí)行過程有直觀、清晰的認識。

    4.2 類對象的運算

    運算符重載是面向?qū)ο蟪绦蛟O(shè)計中比較重要的概念。通過重載運算符,可以使C++已有的運算符能夠用于類對象的運算。

    重載雙目運算符時,由于存在對象與對象的運算、對象與基本類型數(shù)據(jù)的運算,以及基本類型數(shù)據(jù)與對象的運算3種情況,若要定義3個運算符重載函數(shù)實現(xiàn)這3種運算,則比較繁瑣。對后2種情況,可以通過定義轉(zhuǎn)換構(gòu)造函數(shù)或重載類型轉(zhuǎn)換運算符,將兩種不同類型的操作數(shù)轉(zhuǎn)換為同一類型數(shù)據(jù)再進行運算。

    ⑴ 將基本類型數(shù)據(jù)轉(zhuǎn)換為對象

    利用轉(zhuǎn)換構(gòu)造函數(shù),可以將基本類型數(shù)據(jù)轉(zhuǎn)換為類對象。介紹轉(zhuǎn)換構(gòu)造函數(shù)時,通過復數(shù)類例題,講清楚在類中定義轉(zhuǎn)換構(gòu)造函數(shù)的方法,以及轉(zhuǎn)換構(gòu)造函數(shù)與運算符重載函數(shù)配合使用,實現(xiàn)基本類型數(shù)據(jù)與類對象運算的過程。主要代碼如下。

    class Complex

    {public:

    Complex(double r=0,double i=0):real(r),imag(i)

    { }

    Complex(double r):real(r),imag(0){} //轉(zhuǎn)換構(gòu)造函數(shù)

    void show()

    { cout<

    { }

    Complex(double r):real(r),imag(0){}

    operator double() //重載類型轉(zhuǎn)換運算符

    { return real; }

    void show()

    { cout

    double real,imag;

    };

    int main()

    { Complex c1(3,5),c2(4.1,10);

    double d=10+c2; cout<

    猜你喜歡
    面向?qū)ο?/a>程序設(shè)計教學方法
    初中英語寫作教學方法初探
    甘肅教育(2020年2期)2020-09-11 08:01:42
    基于Visual Studio Code的C語言程序設(shè)計實踐教學探索
    計算機教育(2020年5期)2020-07-24 08:52:56
    教學方法與知識類型的適宜
    從細節(jié)入手,談PLC程序設(shè)計技巧
    電子制作(2019年9期)2019-05-30 09:42:04
    面向?qū)ο蟮挠嬎銠C網(wǎng)絡(luò)設(shè)計軟件系統(tǒng)的開發(fā)
    電子測試(2018年15期)2018-09-26 06:01:34
    面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
    高職高專院校C語言程序設(shè)計教學改革探索
    面向?qū)ο骔eb開發(fā)編程語言的的評估方法
    PLC梯形圖程序設(shè)計技巧及應(yīng)用
    初中數(shù)學教師不可忽視的幾種教學方法
    散文百家(2014年11期)2014-08-21 07:17:18
    牙克石市| 潜江市| 镇安县| 浦县| 儋州市| 东源县| 鱼台县| 许昌县| 大足县| 太谷县| 桐柏县| 江川县| 珲春市| 平山县| 韶山市| 内黄县| 贺兰县| 军事| 乌鲁木齐市| 垣曲县| 重庆市| 平定县| 陕西省| 佛学| 平泉县| 吉林省| 鄂托克前旗| 彰武县| 神木县| 阿瓦提县| 平凉市| 隆安县| 饶平县| 芦溪县| 河曲县| 海原县| 丰城市| 出国| 嘉善县| 安庆市| 汾西县|