?? 02.1 從結構到類.txt
字號:
在學習Visual C++ 6.0編程之前,有必要復習一下C++中面向對象的一些基本概念。我們知道,C++與C相比有許多優點,主要體現在封裝性(Encapsulation)、繼承性(Inheritance)和多態性(Polymorphism)。封裝性把數據與操作數據的函數組織在一起,不僅使程序結構更加緊湊,并且提高了類內部數據的安全性;繼承性增加了軟件的可擴充性及代碼重用性;多態性使設計人員在設計程序時可以對問題進行更好的抽象,有利于代碼的維護和可重用。Visual C++不僅僅是一個編譯器,更是一個全面的應用程序開發環境,讀者可以充分利用具有面向對象特性的C++語言開發出專業級的Windows應用程序。熟練掌握本章的內容,將為后續章節的學習打下良好的基礎。
2.1 從結構到類
在C語言中,我們可以定義結構體類型,將多個相關的變量包裝為一個整體使用。在結構體中的變量,可以是相同、部分相同,或完全不同的數據類型。在C語言中,結構體不能包含函數。在面向對象的程序設計中,對象具有狀態(屬性)和行為,狀態保存在成員變量中,行為通過成員方法(函數)來實現。C語言中的結構體只能描述一個對象的狀態,不能描述一個對象的行為。在C++中,對結構體進行了擴展,C++的結構體可以包含函數。
2.1.1 結構體的定義
下面我們看看如例2-1所示的程序(EX01.CPP)。
例2-1
#include <iostream.h>
struct point
{
int x;
int y;
};
void main()
{
point pt;
pt.x=0;
pt.y=0;
cout<<pt.x<<endl<<pt.y<<endl;
}
在這段程序中,我們定義了一個結構體point,在這個結構體當中,定義了兩個整型的變量,作為一個點的X坐標和Y坐標。在main函數中,定義了一個結構體的變量pt,對pt的兩個成員變量進行賦值,然后調用C++的輸出流類的對象cout將這個點的坐標輸出。
在C++中預定義了三個標準輸入輸出流對象:cin(標準輸入)、cout(標準輸出)和cerr(標準錯誤輸出)。cin與輸入操作符(>>)一起用于從標準輸入讀入數據,cout與輸出操作符(<<)一起用于輸出數據到標準輸出上,cerr與輸出操作符(<<)一起用于輸出錯誤信息到標準錯誤上(一般同標準輸出)。默認的標準輸入通常為鍵盤,默認的標準輸出和標準錯誤輸出通常為顯示器。
cin和cout的使用比C語言中的scanf和printf要簡單得多。使用cin和cout你不需要去考慮輸入和輸出的數據的類型,cin和cout可以自動根據數據的類型調整輸入輸出的格式。
對于輸出來說,按照例2-1中所示的方式調用就可以了,對于輸入來說,我們以如下方式調用即可:
int i;
cin>>i;
注意:在使用cin和cout對象時,要注意箭頭的方向。在輸出中我們還使用了endl(end of line),表示換行,注意最后一個是字母‘l’,而不是數字1。endl相當于C語言的'\n',endl在輸出流中插入一個換行,并刷新輸出緩沖區。
因為用到了C++的標準輸入輸出流,所以我們需要包含iostream.h這個頭文件,就像我們在C語言中用到了printf和scanf函數時,要包含C的標準輸入輸出頭文件stdio.h。
提示:在定義結構體時,一定不要忘了在右花括號處加上一個分號(;)。
我們將結構體point的定義修改一下,結果如例2-2所示:
例2-2
struct point
{
int x;
int y;
void output()
{
cout<<x<<endl<<y<<endl;
}
};
在point這個結構體中加入了一個函數output。我們知道在C語言中,結構體中是不能有函數的,然而在C++中,結構體中是可以有函數的,稱為成員函數。這樣,在main函數中就可以以如下方式調用:
void main()
{
point pt;
pt.x=0;
pt.y=0;
// cout<<pt.x<<endl<<pt.y<<endl;
pt.output();
}
注意:在C++中,//......用于注釋一行,/*......*/用于注釋多行。
2.1.2 結構體與類
將上面例2-2所示的point結構體定義中的關鍵字struct換成class,得到如例2-3所示的定義。
例2-3
class point
{
int x;
int y;
void output()
{
cout<<x<<endl<<y<<endl;
}
};
這就是C++中的類的定義,看起來是不是和結構體的定義很類似?在C++語言中,結構體是用關鍵字struct聲明的類。類和結構體的定義除了使用關鍵字“class”和“struct”不同之外,更重要的是在成員的訪問控制方面有所差異。結構體默認情況下,其成員是公有(public)的;類默認情況下,其成員是私有(private)的。在一個類當中,公有成員是可以在類的外部進行訪問的,而私有成員就只能在類的內部進行訪問了。例如,現在設計家庭這樣一個類,對于家庭的客廳,可以讓家庭成員以外的人訪問,我們就可以將客廳設置為public。對于臥室,只有家庭成員才能訪問,我們可以將其設置為private。
提示:在定義類時,同樣不要忘了在右花括號處加上一個分號(;)。
如果我們編譯例2-4所示的程序(EX02.CPP):
例2-4
#include <iostream.h>
class point
{
int x;
int y;
void output()
{
cout<<x<<endl<<y<<endl;
}
};
void main()
{
point pt;
pt.x=0;
pt.y=0;
pt.output();
}
將會出現如圖2.1所示的錯誤提示信息,提示我們不能訪問類中私有(private)的成員變量和成員函數。
圖2.1 在類的外部訪問類中私有成員變量提示出錯
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -