亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 06章 類與數據抽象(一).txt

?? C++大學教程txt版中文版 C++大學教程txt版中文版
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
6.10  初始化類對象:構造函數
    生成類對象時,其成員可以用類的構造函數初始化。構造函數是與類同名的成員函數。程序員提供的構造函數在每次生成類對象(實例化)時自動調用。構造函數可以重載.提供初始化類對象的不同方法。數據成員應在類的構造函數中初始化或在生成對象之后設置其數值。

    常見編程錯誤6. 7
    類的數據成員只能在類定義中初始化。

    常見編程錯誤6.8
    試圖聲明構造函數的返回類型和返回植是個語法錯誤。
    
    編程技巧6.5
    適當時候(通常都是)應提供一十構速函數,保證每個對象正確地初始化為有意義的值。特別是指針數
據類型應初始化為合法指針值或0。

    測試與調試提示6.4
    每個修改對象的private數據成員的成員函數(和友元)應確保數據保持一致狀態。
    聲明類對象時,可以在括號中提供初始化值,放在對象名后面和分號前面。這些初始化值作為

參數傳遞給類的構造函數。稍后會舉幾個構造函數調用(constructor call)的例子(注意:盡管程序
員不顯式調用構造函數,但程序員仍然可以提供數據,作為參數傳遞給構造函數)。

6.11  在構造函數中使用默認參數
    圖6.1time1.cpp中的構造函數將hour、minute和second初始化為0(即軍用時間午夜11時)。
構造函數可以包含默認參數。圖6.8重新定義Time的構造函數,該函數中每個變量的默認參數為0。通過提供構造函數默認參數,即使在構造函數調用中不提供數值,對象也能利用默認參數初始化為一致狀態。程序員提供所有參數默認值(或顯式不要求參數)的構造函數也稱為默認構造函數(default constnlctor),即可以不用參數而調用的構造函數。一個類只能有一個默認構造函數。

1 // Fig. 6.8: time2.h
2 // Declaration of the Time class.
3 // Member functions are defined in time2.cpp
4
5 // preprocessor directives that
6 // prevent multiple inclusions of header file
7 #ifndef TIME2_H
8 #define TIME2_H
9
10 // Time abstract data type definition
11 class Time {
12 public:
13   Time( int = 0, int = 0, int = 0 );  // default constructor
14   void setTime( int, int, int ); // set hour, minute, second
15   void printMilitary();        // print military time format
16   void printStandard();        // print standard time format
17 private:
18   int hour;    // 0 - 23
19   int minute;  // 0  59
20   int second;  // 0 - 59
21 };
22
23 #endif
24 // Fig. 6.8: time2.cpp
25 // Member function definitions for Time class.
26 #include <iostream.h>
27 #include "time2.h"
28
29 // Time constructor initializes each data member to zero.
30 // Ensures all Time objects start in a consistent state.
31 Time::Time(int hr,int min,int sec)
32   { setTime( hr, min, sec ); }
33
34 // Set a new Time value using military time. Perform validity
35 // checks on the data values. Set invalid values to zero.
36 void Time::setTime(int h,int m,int s)
37 {
38   hour = ( h >= 0 && h < 24 ) ? h : 0;
39   minute = ( m >0  && m < 60 )?  m : 0;
40   second = ( s >= 0 && s < 60 ) ? s : 0;
41 }
42
43 // Print Time in military format
44 void Time::printMilitary()
45
46   cout << ( hour < 10 ? "O" :  "" ) << hour << ":"
47        << ( minute < 10 ? "0" :  "" ) << minute;
48 }
49
50 // Print Time in standard format
51 void Time::printStandard()
53   cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
54        << ":" <<(  minute < 10 ? "0" :  "" ) << minute
55        << ":" << ( second < 10 ? "0" :  "" ) << second
56        << ( hour < 12 ? "AM" : "PM" );
57 }
58 // Fig. 6.8: fig06_08.cpp
59 // Demonstrating a default constructor
60 // function for class Time.
61 #include<iostream.h>
62 #include "time2.h"
63
64 int main()
65 {
66    Time t1,           // all arguments defaulted
67   t2(2),        // minute and second defaulted
68   t3(21, 34),    // second defaulted
69   t4(12, 25, 42), // all values specified
70   t5(27, 74, 99); // all bad values specified
71
72   cout << "Constructed with:\n"
73        << "all arguments defaulted:\n  ";
74   t1.printMilitary();
75   cout << "\n  ";
76   t1.printStandard();
77
78   cout << "\nhour specified; minute and second defaulted:"
79        << "\n  ";
80   t2.printMilitary{);
81   cout << "\n  ";
82   t2.printStandard();
83
84   cout << "\nhour and minute specified; second defaulted:"
85        << "\n  ";
86   t3.printMilitary();
87   cout << "\n ";
88   t3.printStandard();
89
90   cout << "\nhour, minute, and second specified:"
91        << "\n  ";
92   t4.printMilitaryO;
93   cout << "\n  ";
94   t4.printStandard();
95
96   cout << "\nall invalid values specified:"
97        << "\n  ";
98   t5.printMilitary();
99   cout << "\n  ";
100 t5.printStandardO;
101  cout << endl;
102
103   return 0;
104 }

輸出結果:
Constructed with:
all arguments defaulted
     00:00
     12:00:00 AM
hour specified; minute and second defaulted:
     02:00
     2:O0:0O AM
hour and minute specified; second defaulted:
     21:34
     9:34:00 PM
hour, minute, and second specified:
     12:25
     12:25:42 PM
all invalid values specified:
     00:00
     12:00:00 AM

                                 圖 6.8 構造函數使用默認參數

    在這個程序中,構造函數調用成員函數setTime,將數值傳人構造函數(或用默認值)保證hour  值取0到13、minute和second值取0到59。如果數值超界,則setTime將其設置為0(使數據成員保證一致狀態)。
    注意,Time構造函數也可以寫成包含與setTime成員函數相同的語句。這樣可能會使程序更有效,因為不必另外再調用setTime函數。但讓Time構造函數和setTime成員函數使用相同代碼會使程序維護更加困難。如果setTime成員函數的實現方法改變,則Time構造函數的實現方法也要相應  改變。Time構造函數直接調用setTime時,setTime成員函數的實現方法只要改變一次即可,這樣就  可以在改變實現方法時減少錯誤。另外,顯式聲明內聯的構造函數或在類定義中定義構造函數也可以提高Time構造函數的性能(后者隱含內聯函數定義)。

    軟件工程視點6.19
    如果類的成員函數已經提供類的構造函數(或其他成員函數)所需功能的所有部分,則從構造函數(或其他成員函數)調用這個成員函數。這樣可以簡化代碼維護和減少修改代碼實現方法時的出錯機會。因此就形成了一個一般原則:避免重復代碼。

    編程技巧6.6
    只在頭文件內的類定義的函數原型中聲明默認函數參數值。

    常見編程錯誤6.9
    在頭文件和成員函數定義中指定同一成員函數的默認初始化值。
    圖6.8的程序初始化五個Time對象:一個將三個參數指定為默認值,一個指定一個參數,一個指定兩個參數.一個指定三個參數,一個指定三個無效參數。每個對象數據成員均顯示實例化和初始化之后的內容。
    如果類不定義構造函數,則編譯器生成默認構造函數。這種構造函數不進行任何初始化,因此生成對象時,不能保證處于一致狀態。

    軟件工程視點6.20
    類不一定有默認構造函數。

6.12  使用析構函數
    析構函數是類的特殊成員函數。類的析構函數名是類名前面加上代字符(~)這種命名規則很直觀,因為本章稍后將會介紹,代字運算符是按位取反符,從這個意義上,析構函數是構造函數的反函數。
    類的析構函數在刪除對象時調用,即程序執行離開初始化類對象的范圍時。析構函數本身并不實際刪除對象,而是進行系統放棄對象內存之前的清理工作,使內存可以復用于保存新對象。
    析構函數不接受參數也不返回數值。類只可能有一個析構函數,不能進行析構函數重載。常見編程錯誤6.10
    向析構函數傳遞參數、指定析構函數的返回值類型(即使指定void)、從析構函數返回數值或重載析構函數都是語法錯誤。
    注意,前面介紹的類都沒有提供析構函數。下面要介紹幾個使用析構函數的例子。第8章將介紹析構函數適用于動態分配內存的對象類(例如數組和字符串)。第7章將介紹如何動態分配內存和釋放內存。

    軟件工程視點6.21
    稍后會介招,構造函數和析構函數在C++和面向對象編程中相當重要,不是這里的介紹所能說清楚的。

6.13  何時調用構造函數與析構函數
    構造函數與析構函數是自動調用的。這些函數的調用順序取決于執行過程進入和離開實例化對象范圍的順序。一般來說,析構函數的調用順序與構造函數相反。但圖6.9將介紹對象存儲類可以改變析構函數的調用順序。
  全局范圍中定義的對象的構造函數在文件中的任何其他函數(包括main)執行之前調用(但不同文件之間全局對象構造函數的執行順序是不確定的)。當main終止或調用exit函數時(見第18章)調用相應的析構函數。
    當程序執行到對象定義時,調用自動局部對象的構造函數。該對象的析構函數在對象離開范圍時調用(即離開定義對象的塊時)。自動對象的構造函數與析構函數在每次對象進人和離開范圍時調用。
    static局部對象的構造函數只在程序執行首次到達對象定義時調用一次,對應的析構函數在main終止或調用exit函數時調用。
    圖6.9的程序演示了CreateAndDestroy類型的對象在幾種范圍中調用構造函數與析構函數的順序。程序在全局范圍中定義first,其構造函數在程序開始執行時調用,其析構函數在程序終止時刪除所有其他對象之后調用。

1 // Fig. 6,9: create,h
2 // Definition of class CreateAndDestroy.
3 // Member functions defined in create.cpp,
4 #ifndef CREATE_H
5 #define CREATE_H
6
7 class CreateAndDestroy {
8 public:
9   CreateAndDestroy( int );  // constructor
10   ~CreateAndDestroy();     // destructor
11 private:
12   int data;
13 };
14
15 #endif
16 // Fig, 6.9: create.cpp
17 // Member function definitions for class CreateAndDestroy
18 #include <iostream.h>
19 #include "create.h"
20
21 CreateAndDestroy::CreateAndDestroy( int value )
22 {
23    data = value;
24     cout << "Object "<< data <<"  constructor";
29 }
26
27 CreateAndDestroy::~CreateAndDestroyO
28   { cout << "Object "<< data <<"  destructor "<< endl; }
29 // Fig, 6.9: fig0609.cpp
30 // Demonstrating the order in which constructors and
31 // destructors are called.
32 #include <iostream.h>
39 #include "create.h"
34
35 void create( void );  // prototype
36
37 CreateAndDestroy first( 1 );  // global object
38
39 int main()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区免费| 一区二区三区免费在线观看| 中文字幕在线播放不卡一区| 亚洲午夜在线视频| 成人永久aaa| 日韩欧美精品三级| 亚洲国产精品嫩草影院| 成人18视频在线播放| 精品久久久久久久久久久久久久久久久| 国产精品盗摄一区二区三区| 久久机这里只有精品| 欧美日韩一级片在线观看| 国产精品久久久久影院亚瑟| 久久爱www久久做| 色伊人久久综合中文字幕| 久久久99精品免费观看| 久久99国产乱子伦精品免费| 欧美精品久久久久久久多人混战 | 久久久精品国产99久久精品芒果 | 国产永久精品大片wwwapp | 中文欧美字幕免费| 国产一区二区在线电影| 日韩午夜av一区| 亚洲福利视频三区| 欧美影视一区二区三区| 亚洲精选一二三| 91在线观看污| 亚洲视频一区二区免费在线观看| 国产成人av福利| 久久精品夜色噜噜亚洲a∨ | 午夜精品福利一区二区蜜股av| 91麻豆.com| 樱花草国产18久久久久| 日本高清不卡在线观看| 亚洲一区在线观看免费观看电影高清 | 亚洲一区二区欧美| 欧美日韩三级一区二区| 亚洲成人一区二区| 欧美人妇做爰xxxⅹ性高电影| 亚洲444eee在线观看| 欧美日韩国产小视频在线观看| 午夜精品久久久| 91精品国产综合久久香蕉的特点 | 日韩女同互慰一区二区| 国产综合成人久久大片91| 国产网红主播福利一区二区| 国产成人综合视频| 国产精品初高中害羞小美女文| 91性感美女视频| 亚洲图片有声小说| 日韩亚洲欧美在线| 国产成人免费在线观看不卡| 国产精品国产三级国产专播品爱网| kk眼镜猥琐国模调教系列一区二区 | www激情久久| 成人a级免费电影| 亚洲欧美电影一区二区| 欧美在线视频你懂得| 日本视频一区二区三区| 久久精品人人做| 一本久道久久综合中文字幕| 天天色天天爱天天射综合| 欧美精品一区二区不卡| 97久久精品人人爽人人爽蜜臀| 亚洲成人自拍网| 久久九九国产精品| 欧美日韩国产123区| 国产乱码精品一区二区三| 亚洲免费伊人电影| 精品欧美一区二区在线观看| 99视频在线观看一区三区| 天涯成人国产亚洲精品一区av| 亚洲精品一区二区在线观看| 91女神在线视频| 青青草视频一区| 日韩美女久久久| 精品久久人人做人人爽| 在线观看网站黄不卡| 国产精品资源站在线| 无码av免费一区二区三区试看 | 欧美成人猛片aaaaaaa| 色欧美片视频在线观看在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 中文字幕一区免费在线观看| 日韩一区二区在线观看视频| 91在线免费播放| 国产精品一区二区免费不卡| 午夜精品久久久久久不卡8050| 中文字幕一区在线观看| 26uuu另类欧美| 欧美日韩dvd在线观看| 波多野结衣中文字幕一区二区三区 | 亚洲国产精品一区二区久久| 国产日韩成人精品| 日韩三级av在线播放| 欧美日韩一级片网站| 色综合久久中文字幕综合网| 丰满亚洲少妇av| 国产一区二区精品久久91| 日韩精品欧美成人高清一区二区| 亚洲人成网站精品片在线观看| 亚洲国产成人自拍| 久久精品欧美日韩精品| 久久综合久久鬼色中文字| 91精品国产色综合久久久蜜香臀| 色婷婷综合久久| 91麻豆精品一区二区三区| 成人中文字幕合集| 懂色av噜噜一区二区三区av| 国产又粗又猛又爽又黄91精品| 久久精品免费观看| 麻豆国产精品官网| 久久99热这里只有精品| 奇米精品一区二区三区在线观看| 午夜影院久久久| 五月激情综合网| 日韩av一级片| 久久精品国产在热久久| 麻豆精品视频在线观看免费| 奇米精品一区二区三区在线观看| 青青草97国产精品免费观看| 日本欧美加勒比视频| 日本欧美一区二区三区| 极品尤物av久久免费看| 国内精品不卡在线| 粉嫩av一区二区三区在线播放| 处破女av一区二区| 91网站最新网址| 欧美特级限制片免费在线观看| 欧美日韩在线一区二区| 69久久99精品久久久久婷婷| 日韩亚洲欧美一区| 国产无人区一区二区三区| 综合电影一区二区三区| 亚洲国产精品久久人人爱| 欧美aaa在线| 国产91精品入口| 欧美影院一区二区三区| 日韩视频免费直播| 国产欧美精品国产国产专区| 综合在线观看色| 亚洲成av人片在www色猫咪| 麻豆视频观看网址久久| 不卡av在线免费观看| 9191久久久久久久久久久| 久久精品视频一区| 亚洲自拍与偷拍| 国产精品综合在线视频| 色婷婷av久久久久久久| 精品噜噜噜噜久久久久久久久试看| 国产香蕉久久精品综合网| 夜夜嗨av一区二区三区中文字幕| 美女高潮久久久| 97久久精品人人做人人爽| 欧美成人在线直播| 亚洲免费高清视频在线| 日本美女视频一区二区| av午夜精品一区二区三区| 在线电影院国产精品| 国产精品网站在线播放| 日本不卡中文字幕| 94-欧美-setu| 欧美精品一区二区三区很污很色的| 亚洲啪啪综合av一区二区三区| 另类中文字幕网| 91成人免费电影| 中文字幕乱码久久午夜不卡| 日韩精品乱码av一区二区| www.综合网.com| 久久伊99综合婷婷久久伊| 亚洲成人自拍网| 97精品久久久久中文字幕| 国产午夜精品在线观看| 男女男精品网站| 在线观看免费一区| 综合久久久久综合| 国产成人一级电影| 精品久久久久久久久久久久久久久| 亚洲bdsm女犯bdsm网站| 色天天综合色天天久久| 中文字幕国产精品一区二区| 久久精品国产久精国产爱| 在线播放亚洲一区| 亚洲最大色网站| 色婷婷综合激情| 亚洲激情自拍偷拍| www.成人在线| 国产精品色哟哟| 国产一区二区在线观看免费| 欧美一区二区三区婷婷月色| 天天操天天色综合| 欧美亚洲高清一区| 亚洲一区在线观看免费| 色婷婷久久久亚洲一区二区三区| 国产精品你懂的在线欣赏| 成人午夜激情影院| 中文字幕av一区二区三区| 大陆成人av片| 国产精品网站一区| 99久久精品情趣|