999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

《C++程序設計》課程中構造函數的教學改革探索

2016-11-15 05:40:41史小飛宮彥軍
湖南科技學院學報 2016年5期
關鍵詞:程序

史小飛 宮彥軍

?

《C++程序設計》課程中構造函數的教學改革探索

史小飛1宮彥軍2

(1.湖南科技學院 圖書館,湖南 永州 425199;2.湖南科技學院 電子與信息工程學院,湖南 永州 425199)

在《C++程序設計》教學中構造函數部分是重要的教學內容,文章設計了構造函數的引入,講解構造函數的作用,深入講解類在沒有默認構造函數時,如何開辟動態對象數組,補充課本中沒有的構造函數可以用來修改數據成員的內容,用構造函數可以修改常數據成員。

C++語言;構造函數;調用

引 言

C++語言支持面向對象,含有類,類中的構造函數是一種特殊的成員函數,其作用是為類的數據成員賦初值[1-4]。在C++中構造函數的作用就是在對象被創建時利用特定的值構造對象[5]。C++中每個類必須有構造函數,如果用戶沒有提供構造函數,C++提供一個無參構造函數,它僅負責創建對象,而不做任何初始化的工作[6]。構造函數中有默認構造函數、拷貝構造函數和轉換構造函數[7]。以上文獻都是給出構造函數的概念、分類及作用,本文給出《C++程序設計》中構造函數部分教學的設計過程,對此部分內容進行教學改革與探索。

1 構造函數的引入

1.1無參構造函數的引入

給學生演示下面的例子“程序一”,代碼如下:

#include

using namespace std;

class Time

{

public:

void set_time(); void show_time();

private:

int hour,minute,sec;

};

void Time::show_time()

{

cout<

}

int main()

{

int a;

cout<

Time t1;

t1.show_time();

return 0;

}

問學生,這程序的輸出結果是什么?演示程序,程序給出的結果是事先不可預知的,是隨機值,a的輸出是隨機值,因為沒有初始化,而時間類的數據成員的輸出也是隨機值,說明沒有初始化,對象的數據成員如何初始化?和學生互動,對學生進行啟發,能否在定義數據成員進行初始化,即能否在定義數據成員的同時賦值?

修改上面的代碼

int hour=0,minute=0,sec=0;

編譯時會出現6個錯誤。那如何初始化,就引入構造函數概念。把數據成員都初始化為固定的值,例如上面的Time類的hour、minute和sec都初始化為0。在Time類中“private:”前面補充如下代碼:

Time()

{

hour=0;minute=0;sec=0;

}

這個程序為“程序二”。

主函數中的a初始化為0,則程序的執行結果如下:

圖1.程序二的運行結果

通過無參構造函數,引入構造函數的概念,構造函數是特殊的成員函數,它的名字與類名相同,沒有返回值類型,在建立對象時自動執行。

1.2有參構造函數的引入

類名后面跟著對象名,定義對象時調用無參構造函數,通過無參構造函數定義對象時,對象數據成員的初始化是固定,如果想定義2個不同的對象,對象的數據成員的初始化的值不同,如何處理?這樣引入有參構造函數。對于上面的Time類需要對三個數據成員初始化,需要一個三參構造函數,在Time類中“private:”前面補充如下代碼:

Time(int h,int m,int s)

{

hour=h;minute=m;sec=s;

}

主函數修改如下,為程序三:

int main()

{

Time t1(1,2,3);

t1.show_time();

return 0;

}

運行程序,執行結果如下:

圖2.“程序三”的運行結果

對于上面的時間類的三參構造函數的使用,是在定義對象的時候提供三個參數,對象名的后面用括號括起的三個參數,為什么這樣寫?Time t1(1,2,3)可以寫成

Time t1=Time(1,2,3)

這樣可以理解為,定義對象也像普通的double型數的初始化一樣進行賦值,這里的賦值是調用三參構造函數進行賦值,“Time t1(1,2,3)”這樣寫是省略了“=Time”。

2 動態對象數組

對象的動態數組,利用對象指針來實現,給學生演示下面的例子“程序四”,代碼如下:

#include

#include

using namespace std;

class Box

{

public:

Box(int h,int w,int len)

{

height=h; width=w; length=len;

}

void output()

{ cout<<"V="<

int volume()

{ return(height*width*length); }

private:

int height,width,length;

};

int main()

{

int n; cout<<"長方體的個數:";

cin>>n; Box *pt;

pt=new Box[n];

for(int i=0;i

cout<

delete[]pt;

return 0;

}

“程序四”編譯后,會出現如下錯誤:

error C2512: 'Box' : no appropriate default constructor available

這個錯誤的原因是類Box沒有無參構造函數。解決辦法一是增加無參構造函數,辦法二是修改開辟動態數組的方法,對“pt=new Box[n]”進行修改,得到“程序五”,修改如下:

pt=(Box*)operator new(sizeof(Box)*n);

用operator new開辟動態數組,對象數組的每個元素的數據成員都是隨機值。

圖3“程序五”的運行結果

3 利用構造函數修改對象的數據成員

“程序五”給出的結果是隨機值,這是因為數組的每個元素的數據成員都是隨機值,可以利用構造函數對動態數組中元素中數據成員進行設置。

修改“程序五”中的主函數,得到“程序六”,“程序六”與“程序五”的區別只是主函數不同,“程序六”主函數如下。

int main()

{

int n,i;

cout<<"長方體的個數:";

cin>>n; Box *pt;

pt=(Box*)operator new(sizeof(Box)*n);

for(i=0;i

{

int a,b,c;

cout<<"輸入長寬高(整數)";

cin>>a>>b>>c;

new(pt+i)Box(a,b,c);

}

for(i=0;i

cout<

delete[]pt;

return 0;

}

圖4.“程序六”的運行結果

從“程序六”的代碼可以看出,可以利用構造函數修改數據成員。

4 利用構造函數修改常數據成員

給學生演示下面的例子“程序七”,代碼如下:

#include

using namespace std;

class Time

{

public:

void show_time()

{ cout<

Time(int h,int m,int s):hour(h)

{ minute=m;sec=s;}

private:

const int hour;

int minute,sec;

};

int main()

{

Time t(1,2,3);

return 0;

}

對于常數據成員必須且只能在構造函數的參數初始化表里面進行初始化。只是修改“程序七”的主函數得到“程序八”,“程序八”的主函數如下:

int main()

{

Time t(1,2,3);

t.show_time(); new(&t)Time(0,0,0);

t.show_time();

return 0;

}

圖5.“程序八”的運行結果

從“程序八”的運行結果可以看出,Time對象的常數據成員發生變化,hour為常數據成員,從1變為0.

結 論

設計了《C++程序設計》課程中構造函數部分采用啟發式教學方案,文章通過實際的例子引入構造函數,逐步引出在沒有默認構造函數時,開辟動態對象數組的方法,補充課本中沒有的構造函數可以用來修改數據成員的內容,用構造函數可以修改常數據成員。

[1]梁伍七.C++構造函數構造類成員的方法剖析[J].安徽廣播電視大學學報,2002,(01):86-88.

[2]程有娥.C++構造函數構造類成員的方法剖析[J].華北工學院學報(社科版),2003,(03):91-92.

[3]宋初一,格日樂圖,姜靜清,等.C++構造函數的剖析[J].內蒙古民族大學學報(自然科學版),2003,(06):502-503.

[4]莊銀霞.關于C++構造函數中的不合理設計的研究[J].信息技術與信息化,2015,(10):139-141.

[5]張勇.C++中構造函數與析構函數的使用[J].宿州教育學院學報,2004,(03):107-108+133.

[6]張永,葉水生,張小鋒.C++中構造函數的深入分析[J].計算機與現代化,2005,(02):14-15+21.

[7]王帥,馬夢娜.關于C++構造函數的幾點探究[J].電腦編程技巧與維護,2013,(10):6-7+19.

(責任編校:何俊華)

2016-01-08

湖南省教育廳資助科研項目(12A054)

史小飛(1970-),女,吉林梨樹人,助理館員,研究方向為圖書館學、情報學、計算機程序設計。

G642.0

A

1673-2219(2016)05-0105-03

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 国产亚洲一区二区三区在线| 久久久久久久久18禁秘| 中文字幕乱妇无码AV在线| 免费无码网站| 亚洲男人的天堂久久精品| 人妻中文久热无码丝袜| 国产v精品成人免费视频71pao| 亚洲男人在线| 国产高清色视频免费看的网址| 亚洲第一色视频| 青青青视频蜜桃一区二区| 午夜免费小视频| 亚洲Av综合日韩精品久久久| 欧美日韩高清在线| h视频在线观看网站| 六月婷婷激情综合| 亚洲精品自产拍在线观看APP| 久久亚洲中文字幕精品一区| 少妇精品网站| 伊人国产无码高清视频| 不卡的在线视频免费观看| 91久久偷偷做嫩草影院精品| 欧美第一页在线| 中国一级毛片免费观看| 黄色网页在线观看| 911亚洲精品| 九色综合伊人久久富二代| 日韩精品一区二区三区大桥未久| 欧美黄色a| 91丝袜乱伦| 欧洲成人在线观看| 成人av专区精品无码国产 | 欧美精品色视频| 狠狠v日韩v欧美v| 免费亚洲成人| 欧美激情视频一区二区三区免费| 国产成人无码久久久久毛片| 免费国产好深啊好涨好硬视频| 国产剧情无码视频在线观看| 高清欧美性猛交XXXX黑人猛交 | 囯产av无码片毛片一级| 先锋资源久久| 2021国产精品自产拍在线| 国产成人av一区二区三区| 久久国产精品国产自线拍| 福利一区三区| 成人免费黄色小视频| 欧美中文字幕一区二区三区| 精品国产网| 亚洲精品在线观看91| 免费jjzz在在线播放国产| 色婷婷成人| 欧美另类精品一区二区三区| 精品国产免费观看一区| 无码啪啪精品天堂浪潮av| 欧美日韩国产精品va| 91无码视频在线观看| 巨熟乳波霸若妻中文观看免费| 国产乱人免费视频| 精品无码视频在线观看| 亚洲人妖在线| 久久久精品国产SM调教网站| 亚洲性网站| 午夜日本永久乱码免费播放片| 国产手机在线ΑⅤ片无码观看| 欧美成人看片一区二区三区| 日本精品视频| 在线另类稀缺国产呦| 好吊日免费视频| 国产一级在线观看www色| 波多野结衣一区二区三区AV| 一区二区午夜| 97影院午夜在线观看视频| 91久久偷偷做嫩草影院免费看| 久久国产亚洲偷自| a毛片免费看| 亚洲欧美综合在线观看| 丝袜无码一区二区三区| 91国语视频| 国产免费久久精品99re丫丫一| 中文字幕人妻无码系列第三区| 波多野结衣第一页|