版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、8.1 面向?qū)ο蟪绦蛟O計方法概述8.2 類的聲明和對象的定義8.3 類的成員函數(shù)8.4 對象成員的引用8.5 類的封裝性和信息隱蔽8.6 類和對象的簡單應用舉例第8章 類和對象的特性8.1 面向?qū)ο蟪绦蛟O計(OOP)方法概述傳統(tǒng)的面向過程的程序設計方法是圍繞功能進行的,用一個函數(shù)實現(xiàn)一個功能。當程序規(guī)模大、數(shù)據(jù)很多、數(shù)據(jù)結(jié)構(gòu)復雜、功能種類繁多時,程序設計者會難以應付。面向?qū)ο蟮某绦蛟O計的設計思路是圍繞數(shù)據(jù)對象進行的,先將數(shù)據(jù)和對數(shù)據(jù)的操作封裝成一個個對象,然后調(diào)用各個對象完成所需的任務。對大型程序設計來說,面向?qū)ο蟪绦蛟O計的方法十分有效,能大大降低程序設計者的工作難度,減少出錯的機會。OOP的
2、最重要的特性:抽象-將一個個同類的個體抽象成一個“類” 如:張三、李四等具體的人抽象出 “人”的概念封裝和數(shù)據(jù)隱藏 將數(shù)據(jù)和對數(shù)據(jù)的操作代碼封裝在一個對象中,形成一個基本單位。對象中的數(shù)據(jù)可以對外部隱蔽。8.1 面向?qū)ο蟪绦蛟O計(OOP)方法概述繼承 一個新類可以利用已有的類的基礎上建立起來,該新類是已有類(叫基類)的派生類。派生類中含有基類的數(shù)據(jù)和操作,即繼承了基類的內(nèi)容。可重用代碼 利用派生類繼承機制,可以重用已有軟件的大部分代碼。從已有軟件的類中派生出新類,新類可使用基類的代碼。這樣可減少編程工作量。多態(tài)性 利用派生類繼承機制,各個派生類既有基類的共同特性,又有各個派生類自己新增的特性。
3、 例:設計求圓的周長和面積的程序。 面向過程-首先想的是處理方法(過程):輸入圓的半徑計算面積;計算周長;顯示相關的計算結(jié)果面向過程和面向?qū)ο蟮木幊汤涸O計求圓的周長和面積的程序。 面向過程: 要輸入圓的半徑;=在main函數(shù)中輸入計算面積;=調(diào)用一個函數(shù)計算面積;計算周長;=調(diào)用一個函數(shù)計算周長;顯示相關的計算結(jié)果; =在main函數(shù)中輸出結(jié)果面向過程的編程面向過程方法:求圓的面積 / 計算圓的面積和周長#includeusing namespace std;const float pi = 3.1415 ;float area(float); /函數(shù)原型聲明float girth(floa
4、t); /函數(shù)原型聲明 int main () float r ; cout r ; cout radius = r endl ; cout girth = girth( r ) endl ; cout area = area ( r ) endl ; return 0;/定義求周長函數(shù)float girth(float r) return (2*pi*r);/定義求面積函數(shù)float area(float r) return (pi*r*r);面向過程首先考慮遵循的步驟;然后才考慮如何表示這些數(shù)據(jù);可能提供一個菜單選擇是輸入還是計算還是輸出。面向?qū)ο笤O計有關圓的程序,跟蹤的對象是圓首先考慮的
5、是數(shù)據(jù):圓的半徑;不僅要考慮如何表示數(shù)據(jù),還要考慮如何使用數(shù)據(jù);因此要有一個“類”表示圓的各個方面:表示圓的數(shù)據(jù):半徑一些處理該數(shù)據(jù)的方法: 首先要有獲得“圓”信息的方法; 其次,要有關于“圓”的各種計算方法,如:周長、面積等。另外還需要一些更新和顯示“圓”信息的方法。#includeclass Circle double radius ; public : void Set_Radius( double r ) radius = r ; double Get_Radius( ) return radius ; double Get_Girth( ) return 2 * 3.14f * ra
6、dius ; double Get_Area( ) return 3.14f * radius * radius ; ;int main( ) Circle A, B ; A.Set_Radius( 6.23 ) ; cout A.Radius = A.Get_Radius( ) endl ; cout A.Girth = A.Get_Girth( ) endl ; cout A.Area = A.Get_Area( ) endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.Get_Radius( ) endl ; cout B.Girth= B.Ge
7、t_Girth( ) endl ; cout B.Area = B.Get_Area( ) endl ; return 0;1.1.2 一個簡單的C+程序1.1 概述用面向?qū)ο蟮姆椒ň幊?includeclass Circle double radius ; public : void Set_Radius( double r ) radius = r ; double Get_Radius( ) return radius ; double Get_Girth( ) return 2 * 3.14 * radius ; double Get_Area( ) return 3.14 * rad
8、ius * radius ; ;int main( ) Circle A, B ; A.Set_Radius( 6.23 ) ; cout A.Radius = A.Get_Radius( ) endl ; cout A.Girth = A.Get_Girth( ) endl ; cout A.Area = A.Get_Area( ) endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.Get_Radius( ) endl ; cout B.Girth= B.Get_Girth( ) endl ; cout B.Area = B.Get_Area(
9、) endl ; return 0;Circle 類聲明1.1.2 一個簡單的C+程序1.1 概述用面向?qū)ο蟮姆椒ň幊?includeclass Circle double radius ; public : void Set_Radius( double r ) radius = r ; double Get_Radius( ) return radius ; double Get_Girth( ) return 2 * 3.14 * radius ; double Get_Area( ) return 3.14 * radius * radius ; ;int main( ) Circle
10、 A, B ; A.Set_Radius( 6.23 ) ; cout A.Radius = A.Get_Radius( ) endl ; cout A.Girth = A.Get_Girth( ) endl ; cout A.Area = A.Get_Area( ) endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.Get_Radius( ) endl ; cout B.Girth= B.Get_Girth( ) endl ; cout B.Area = B.Get_Area( ) endl ; return 0;數(shù)據(jù)成員:圓的半徑1.1.2 一
11、個簡單的C+程序1.1 概述用面向?qū)ο蟮姆椒ň幊?includeclass Circle double radius ; public : void Set_Radius( double r ) radius = r ; double Get_Radius() return radius ; double Get_Girth() return 2 * 3.14 * radius ; double Get_Area() return 3.14 * radius * radius ; ;int main() Circle A, B ; A.Set_Radius( 6.23 ) ; cout A.R
12、adius = A.Get_Radius() endl ; cout A.Girth = A.Get_Girth() endl ; cout A.Area = A.Get_Area() endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.Get_Radius() endl ; cout B.Girth= B.Get_Girth() endl ; cout B.Area = B.Get_Area() endl ; return 0;成員函數(shù):對圓的操作1.1.2 一個簡單的C+程序1.1 概述用面向?qū)ο蟮姆椒ň幊?includeclass Circle
13、 double radius ; public : void Set_Radius( double r ) radius = r ; double Get_Radius() return radius ; double Get_Girth() return 2 * 3.14 * radius ; double Get_Area() return 3.14 * radius * radius ; ;int main() Circle A, B ; A.Set_Radius( 6.23 ) ; cout A.Radius = A.Get_Radius() endl ; cout A.Girth =
14、 A.Get_Girth() endl ; cout A.Area = A.Get_Area() endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.Get_Radius() endl ; cout B.Girth= B.Get_Girth() endl ; cout B.Area = B.Get_Area() endl ; return 0;建立對象(類類型變量)1.1.2 一個簡單的C+程序1.1 概述用面向?qū)ο蟮姆椒ň幊?includeclass Circle double radius ; public : void Set_Radius(
15、double r ) radius = r ; double Get_Radius() return radius ; double Get_Girth() return 2 * 3.14 * radius ; double Get_Area() return 3.14 * radius * radius ; ;int main() Circle A, B ; A.Set_Radius( 6.23 ) ; cout A.Radius = A.Get_Radius() endl ; cout A.Girth = A.Get_Girth() endl ; cout A.Area = A.Get_A
16、rea() endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.Get_Radius() endl ; cout B.Girth= B.Get_Girth() endl ; cout B.Area = B.Get_Area() endl ; return 0;1.1.2 一個簡單的C+程序1.1 概述通過對象調(diào)用類的成員函數(shù)用面向?qū)ο蟮姆椒ň幊?.2 類的聲明和對象的定義8.2.1 類和對象的關系 類-相當于類型,是具體對象的抽象。 類不占用內(nèi)存空間。 對象-是類的具體實例。是屬于“類”類型的 變量。對象是占用內(nèi)存空間的。8.2.2 聲明類類型 舉例
17、說明:#includeclass Tdate public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;void main() Tdate a ; a.Set (10, 16, 2003) ; a.Prin
18、t() ;為便于識別類,一般可約定將類名首字母大寫 #includeclass Tdate public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;void main() Tdate a ; a.Set
19、(10, 16, 2003) ; a.Print() ;class Tdate public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;類聲明 #includeclass Tdate public: vo
20、id Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;void main() Tdate a ; a.Set (10, 16, 2003) ; a.Print() ;class Tdate public: void Set
21、(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;關鍵字定義一個類標識符類名 class ,struct 都可以定義一個類: class缺省說明時,其成員被認為是私有的 struct若不特別指出,其所有成員都是公有的 類聲明的關鍵
22、字 #includeclass Tdate public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;void main() Tdate a ; a.Set (10, 16, 2003) ; a.Print
23、() ;aTdate 類的一個對象(實例) 8.2.3 定義對象的方法先聲明類類型,然后再定義對象 如:先定義了Student類類型 再定義屬于Student類的對象stu; class Student . ; Student stu;2. 在聲明類類型的同時定義對象 如:定義Student類類型的同時 定義屬于Student類的對象stu; class Student . stu;3. 在聲明類類型時不要類名,并同時定義對象 如: class . stu; #includeclass Tdate public: void Set(int m, int d, int y ) month = m
24、 ; day = d ; year = y ; int IsLeapYear( ) return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print( ) cout year . month . day endl ; private: int month; int day; int year;void main( ) Tdate a ; a.Set (10, 16, 2003) ; a.Print() ; 類由成員構(gòu)成: 數(shù)據(jù)成員描述對象的屬性 成員函數(shù)描述對象的方法(行為) 8.3 類的成員函數(shù) #includeclass T
25、date public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear( ) return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print( ) cout year . month . day endl ; private: int month; int day; int year;void main() Tdate a ; a.Set (10, 16, 2003) ; a.Print() ;數(shù)據(jù)成員數(shù)據(jù)成員#in
26、cludeclass Tdate public: void Set(int m , int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear( ) return ( year%4 = 0 & year%100 != 0 ) | | ( year%400 = 0); void Print( ) cout year . month . day endl ; private: int month; int day; int year;void main() Tdate a ; a.Set (10, 16, 2003) ; a.Pri
27、nt() ;類中定義成員函數(shù)直接在類中定義成員函數(shù)代碼#includeclass Tdate public: void Set(int m, int d, int y ) ; int IsLeapYear( ) ; void Print( ) ; private: int month; int day; int year; void Tdate:Set(int m, int d, int y ) month = m ; day = d ; year = y ; int Tdate:IsLeapYear( ) return ( year%4 = 0 & year%100 != 0 )|( yea
28、r%400 = 0); void Tdate:Print( ) cout year . month . day endl ; 在類外定義成員函數(shù): 作用域限定符類中聲明函數(shù),類外定義代碼 #includeclass Tdate public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl
29、; private: int month; int day; int year;void main() Tdate a ; a.Set (10, 16, 2003) ; a.Print( ) ;成員的性質(zhì)由關鍵字public、protected、private 決定public 公有 公有段的成員是提供給外部的接口protected 保護 保護段成員在該類和它的派生類中可見private 私有 私有段成員僅在類中可見各段中既可以包含數(shù)據(jù)成員,也可以包含成員函數(shù)成員訪問限定符#includeclass Tdate public: void Set(int m, int d, int y ) mo
30、nth = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout year . month . day endl ; private: int month; int day; int year;void main( ) Tdate a ; a.Set (10, 16, 2003) ; a.Print( ) ;類說明的一般形式為: class 類名 public:公有段數(shù)據(jù)成員和成員函數(shù) ; protected: 保護段數(shù)
31、據(jù)成員和成員函數(shù) ; private:私有數(shù)據(jù)成員和成員函數(shù) ; ; 類聲明的一般形式例 學生類的定義class Student public: void display( ) / 公有的成員函數(shù) coutnum:numendl; coutname:nameendl; coutsex:sexendl; ; private: int num; / 私有的數(shù)據(jù)成員 string name; char sex;在類內(nèi)定義成員函數(shù)例 學生類的定義class Student public: void display( ); / 公有的成員函數(shù) private: int num; / 私有的數(shù)據(jù)成員 st
32、ring name; char sex;void Student:display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; ;在類內(nèi)聲明成員函數(shù)在類外定義成員函數(shù)#includeclass Tdate public: void Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return ( year%4 = 0 & year%100 != 0 )|( year%400 = 0); void Print() cout ye
33、ar . month . day endl ; private: int month; int day; int year;void main( ) Tdate a , b, c ; a.Set (10, 16, 2003) ; a.Print( ) ; b.Set (12, 16, 2003) ; b.Print( ) ; c.Set (12, 16, 2003) ; c.Print( ) ;8.3.4 成員函數(shù)的存儲方式 屬于同一類的不同對象a, b, c中的數(shù)據(jù)成員的值是不同的,而同一類的不同對象a, b, c的成員函數(shù)的代碼是相同的。如:a.month , b.month, c.mon
34、th 是不同的數(shù)據(jù) a.Set( ) , b.Set( ) , c.Set( ) 三個函數(shù)使用的數(shù)據(jù)分別是a, b, c 中的數(shù)據(jù),但函數(shù)代碼是公用的。8.3.4 成員函數(shù)的存儲方式class Student /聲明類類型 public: int num; char name20; float score; void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexnum p-score p-display( );引用 Student stud1; Student &stud2=stud1; stud2.num stud2.s
35、core stud2.display( );成員運算符class Student public: int num; char name20; float score; void display( ) coutnum:numendl; coutname:nameendl; coutscorescorenum=1001; strcpy(p-name,zhang san); p-score=89.5; p-display(); return 0;指針int main() Student *p=new Student; p-num=1001; strcpy(p-name,zhang san); p-s
36、core=89.5; p-display(); delete p; return 0;引用int main() Student stu1; Student &s=stu1; s.num=1001; strcpy(,zhang san); s.score=89.5; cout*&*endl; s.display(); return 0;公有的還是私有的class Student public: = private: /私有成員 int num; char name20; float score; void display( ) coutnum:numendl; coutname:na
37、meendl; coutscorescoreendl; ;int main() Student stud1; /定義Student 類的對象 stud1.num=1001; /stud1.num 是私有成員,不能在類外使用 strcpy(, “zhang san”); stud1.score=89; stud1.display(); return 0;公有的還是私有的無論類成員是數(shù)據(jù)成員還是成員函數(shù),都可以在類的公有部分或私有部分中聲明它;但隱藏數(shù)據(jù)是OOP的主要目標之一,因此數(shù)據(jù)項通常放在私有部分;將作為類接口的成員函數(shù)放在公有部分,否則,就無法從程序中調(diào)用這些函數(shù).8.
38、5 類的封裝性和信息隱蔽8.5.1公有接口與私有實現(xiàn)的分離數(shù)據(jù)隱藏:讓數(shù)據(jù)表示成為私有,使得數(shù)據(jù)只能被授權(quán)的函數(shù)訪問;在聲明一個類時,一般都是把所有的數(shù)據(jù)成員指定為私有的,使它們對外隔離。把需要讓外界調(diào)用的成員函數(shù)指定為公用的。在類外雖然不能直接訪問私有數(shù)據(jù)成員,但可以通過調(diào)用公用的成員函數(shù)來使用甚至修改私有數(shù)據(jù)成員。數(shù)據(jù)隱藏class Student private: /私有成員數(shù)據(jù) int num; char name20; float score; public: void display( ) coutnum:numendl; coutname:nameendl; coutscores
39、coreendl; ;int main() Student stud1; /定義Student 類的對象 stud1.num=1001; /非法,num是私有成員,不能再類外引用 strcpy(, “zhang san”); /非法 stud1.score=89; /非法 stud1.display( ); /合法 return 0;類聲明中增加input成員函數(shù)class Student private: /私有成員數(shù)據(jù) int num; char name20; float score; public: /公有成員函數(shù)接口 void display( ) coutnum
40、:numendl; coutname:nameendl; coutscorescoreendl; ; void input(int no, char *nam, float s);void Student:input(int no , char *nam, float s)num=no; strcpy(name, nam); score=s;使用類int main() Student stu1; stu1.input(1001,zhang san,89.5); stu1.display( ); return 0;創(chuàng)建一個程序,使用類對象,測試類的特性.改進類聲明class Student pr
41、ivate: int num; char name20; float score3; float aver; void average( ); public: void display( ) ; void input(int n, char *p, float s) ; void show_aver( ); ;數(shù)據(jù):三門課成績、平均分方法:求平均分、顯示平均分成員函數(shù)定義void Student:input(int no , char *pnam, float *ps)num=no; strcpy(name, pnam); score0=ps0; score1=ps1; score2=ps2;
42、void Student:display( ) coutnnum:numendl; coutname:nameendl; coutscore:score0 score1 score2endl; void Student:average( )aver=(score0+score1+score2)/3;void Student:show_aver( ) average( ); coutn average=averendl;主函數(shù)int main( ) Student stu1; float s3=60,70,80; stu1.input(1001,“zhang san”, s); / 將1個學生的
43、數(shù)據(jù)存入stu1中 stu1.display( ); / 輸出stu1中的學生數(shù)據(jù) stu1.show_aver( ); / 輸出stu1中的平均分 return 0;改主函數(shù):輸入、輸出10學生int main( ) Student stu10; int no; char name20; float s3; int i; for ( i=0; i10; i+ ) cout“輸入第”i+1“個學生數(shù)據(jù):”nonames0s1s2; stui.input(no, name, s ); for ( i=0; i10; i+ ) cout“第”i+1“個學生:”; stui.display( );
44、stui.show_aver( ); return 0;8.5.2 類聲明和成員函數(shù)定義的分離 在面向?qū)ο蟮某绦蜷_發(fā)中,一般做法是將類的聲明(其中包含成員函數(shù)的聲明)放在指定的頭文件中,用戶如果想用該類,只要把有關的頭文件包含進來即可,不必在程序中重復書寫類的聲明,以減少工作量,節(jié)省篇幅,提高編程的效率。 為了實現(xiàn)上一節(jié)所敘述的信息隱蔽,對類成員函數(shù)的定義一般不放在頭文件中,而另外放在一個文件中。將聲明Student類安排在student.h文件/ student.h 第1個文件class Student private: int num; char name20; float score3;
45、 float aver; void average( ); public: void display( ) ; void input(int n, char *p, float s) ; void show_aver( ); ;將定義Student類的成員函數(shù)安排在student.cpp文件/ student.cpp 第2個文件#include #include student.h“using namespace std;void Student:input(int no , char *pnam, float *ps)num=no; strcpy(name, pnam); score0=ps
46、0; score1=ps1; score2=ps2;void Student:display( ) coutnnum:numendl; coutname:nameendl; coutscore:score0 score1 score2endl; void Student:average( ) aver=(score0+score1+score2)/3;void Student:show_aver( ) average( ); coutn average=averendl; 將包括主函數(shù)在內(nèi)的內(nèi)容安排在源文件main.cpp/ main.cpp 第3個文件#include #include st
47、udent.husing namespace std;int main( ) Student stu10; int no; char name20; float s3; int i; for ( i=0; i10; i+ ) cout“輸入第”i+1“個學生數(shù)據(jù):”nonames0s1s2; stui.input(no, name, s ); for ( i=0; i10; i+ ) cout“第”i+1“個學生:”; stui.display( ); stui.show_aver( ); return 0;這是一個包括3個文件的程序,組成兩個文件模塊: 一個是主模塊main.cpp,一個是s
48、tudent.cpp。在主模塊main.cpp中包含頭文件student.h。在模塊student.cpp中也包含頭文件student.h。編譯時,分別編譯2個cpp文件,得到2個obj文件,在連接成1個exe文件。在實際編程中,并不是將一個類聲明做成一個頭文件,而是將若干個常用的功能相近的類聲明集中在一起,形成類庫。類庫有兩種: 一種是C+編譯系統(tǒng)提供的標準類庫;一種是用戶根據(jù)自己的需要做成的用戶類庫,提供給自己和自己授權(quán)的人使用,這稱為自定義類庫。在程序開發(fā)工作中,類庫是很有用的,它可以減少用戶自己對類和成員函數(shù)進行定義的工作量。 類庫包括兩個組成部分: (1)類聲明頭文件(如studen
49、t.h); (2)已經(jīng)過編譯的成員函數(shù)的定義,它是目標文件(如 student.obj)。 用戶只需把類庫裝入到自己的計算機系統(tǒng)中(一般裝到C+編譯系統(tǒng)所在的子目錄下),并在程序中用#include命令行將有關的類聲明的頭文件包含到程序中,就可以使用這些類和其中的成員函數(shù),順利地運行程序。 由于要求接口與實現(xiàn)分離,為軟件開發(fā)商向用戶提供類庫創(chuàng)造了很好的條件。開發(fā)商把用戶所需的各種類的聲明按類放在不同的頭文件中,同時對包含成員函數(shù)定義的源文件進行編譯,得到成員函數(shù)定義的目標代碼。軟件商向用戶提供這些頭文件和類的實現(xiàn)的目標代碼(不提供函數(shù)定義的源代碼)。用戶在使用類庫中的類時,只需將有關頭文件包含
50、到自己的程序中,并且在編譯后連接成員函數(shù)定義的目標代碼即可。 由于類庫的出現(xiàn),用戶可以像使用零件一樣方便地使用在實踐中積累的通用的或?qū)S玫念悾@就大大減少了程序設計的工作量,有效地提高了工作效率。類和結(jié)構(gòu)體的區(qū)別C+對結(jié)構(gòu)體進行了擴展,使之具有與類相同的特性;唯一的區(qū)別是, 結(jié)構(gòu)體的默認訪問類型是public ,而類為private.C+程序員通常使用類來實現(xiàn)類描述,而把結(jié)構(gòu)體限制為只表示純粹的數(shù)據(jù)對象或沒有私有部分的類.小結(jié)指定類設計的第一步是提供類聲明,典型的類聲明格式如下;class 類名 private: 數(shù)據(jù)成員、成員函數(shù) public:成員函數(shù) ;公有部分的內(nèi)容構(gòu)成設計的抽象部分公
51、有接口第二步是實現(xiàn)類成員函數(shù)創(chuàng)建類的實例對象向?qū)ο蟀l(fā)送消息8.6 類和對象的簡單應用舉例例8.1 最簡單的例子。#include using namespace std;class Time /定義Time類public: /數(shù)據(jù)成員為公用的 int hour; int minute; int sec;int main( ) Time t1; /定義t1為Time類對象 cint1.hour; /輸入設定的時間 cint1.minute; cint1.sec; coutt1.hour:t1.minute:t1.secendl; return 0;例8.3 將程序改用含成員函數(shù)的類來處理。#in
52、clude using namespace std;class Timepublic: void set_time( ); /公用成員函數(shù) void show_time( ); /公用成員函數(shù) private: /數(shù)據(jù)成員為私有 int hour; int minute; int sec;int main( ) Time t1; /定義對象t1 t1.set_time( ); / 向t1的數(shù)據(jù)成員輸入數(shù)據(jù) t1.show_time( ); / 輸出t1的數(shù)據(jù)成員的值Time t2; / 定義對象t2t2.set_time( ); / 向t2的數(shù)據(jù)成員輸入數(shù)據(jù)t2.show_time( ); /
53、 輸出t2的數(shù)據(jù)成員的值return 0;void Timeset_time( ) /在類外定義set_time函數(shù) cinhour; cinminute; cinsec;void Timeshow_time( ) /在類外定義show_time函數(shù) couthour:minute:secendl;例8.4 找出一個整型數(shù)組中的元素的最大值。這個問題可以不用類的方法來解決,現(xiàn)在用類來處理,讀者可以比較不同方法的特點。#include using namespace std;class Array_max /聲明類public: /以下3行為成員函數(shù)原型聲明 void set_value( ); /對數(shù)組元素設置值 void max_value( ); /找出數(shù)組中的最大元素 void show_value( ); /輸出最大值 private: int array10; /整型數(shù)組 int max; /max用來存放最大值;void Array_maxset_value( ) /成員函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紙制蛋糕頂飾商業(yè)機會挖掘與戰(zhàn)略布局策略研究報告
- 裘皮外套細分市場深度研究報告
- 河南省開封市金科新未來2024-2025學年高三上學期10月聯(lián)考數(shù)學試題 含解析
- 人流控制柵欄出租行業(yè)營銷策略方案
- 制罐頭用非電壓力鍋產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 寫字臺產(chǎn)品供應鏈分析
- 美容乳液市場發(fā)展前景分析及供需格局研究預測報告
- 球棒市場發(fā)展前景分析及供需格局研究預測報告
- 電動碾磨機產(chǎn)品供應鏈分析
- 不間斷電源產(chǎn)品供應鏈分析
- 濾波器出廠試驗報告
- 2023-2024學年北京市通州區(qū)九年級(上)期中物理試卷
- 期中模擬試卷-浙2024-2025學年統(tǒng)編版語文四年級上冊
- 公園廣場保潔管理服務投標方案(技術方案)
- 大視聽產(chǎn)業(yè)發(fā)展系列報告一:2024年微短劇內(nèi)容和營銷研究報告-艾瑞咨詢-202408
- 七年級歷史上冊第一學期期中綜合測試卷(人教版 2024年秋)
- 無人機應用技術專業(yè)教學資源庫可研報告
- 輔警勞動合同輔警勞動合同
- 2024版水土保持監(jiān)理合同
- 2024年浙江寧波東方人力資源服務限公司象山分公司招錄派遣制工作人員公開引進高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 武漢版《生命安全教育》九年級 第12課《胸外心臟按壓》教案
評論
0/150
提交評論