程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++語言學習之從結構到類

C++語言學習之從結構到類

編輯:關於C++

編程之前,有必要復習一下C++中面向對象的一些基本概念。我們知道,C++與C相比有許多優點,主要體現在封裝性(Encapsulation)、繼承性(Inheritance)和多態性(Polymorphism)。封裝性把數據與操作數據的函數組織在一起,不僅使程序結構更加緊湊,並且提高了類內部數據的安全性;繼承性增加了軟件的可擴充性及代碼重用性;多態性使設計人員在設計程序時可以對問題進行更好的抽象,有利於代碼的維護和可重用。Visual C++不僅僅是一個編譯器,更是一個全面的應用程序開發環境,讀者可以充分利用具有面向對象特性的C++語言開發出專業級的Windows應用程序。熟練掌握本章的內容,將為後續章節的學習打下良好的基礎。

從結構到類

在C語言中,我們可以定義結構體類型,將多個相關的變量包裝為一個整體使用。在結構體中的變量,可以是相同、部分相同,或完全不同的數據類型。在C語言中,結構體不能包含函數。在面向對象的程序設計中,對象具有狀態(屬性)和行為,狀態保存在成員變量中,行為通過成員方法(函數)來實現。C語言中的結構體只能描述一個對象的狀態,不能描述一個對象的行為。在C++中,對結構體進行了擴展,C++的結構體可以包含函數。

1、結構體的定義

下面我們看看如例1所示的程序(EX01.CPP)。

例1

#include
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可以自動根據數據的類型調整輸入輸出的格式。

對於輸出來說,按照例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

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、結構體與類

將上面例2所示的point結構體定義中的關鍵字struct換成class,得到如例3所示的定義。

例3

class point
{
  int x;
  int y;
  void output()
  {
   cout<<X<<ENDL<<Y<<ENDL;
  }
};

這就是C++中的類的定義,看起來是不是和結構體的定義很類似?在C++語言中,結構體是用關鍵字struct聲明的類。類和結構體的定義除了使用關鍵字“class”和“struct”不同之外,更重要的是在成員的訪問控制方面有所差異。結構體默認情況下,其成員是公有(public)的;類默認情況下,其成員是私有(private)的。在一個類當中,公有成員是可以在類的外部進行訪問的,而私有成員就只能在類的內部進行訪問了。例如,現在設計家庭這樣一個類,對於家庭的客廳,可以讓家庭成員以外的人訪問,我們就可以將客廳設置為public。對於臥室,只有家庭成員才能訪問,我們可以將其設置為private。

提示:在定義類時,同樣不要忘了在右花括號處加上一個分號(;)。

如果我們編譯例4所示的程序(EX02.CPP):

例4

#include
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();
}

將會出現如圖1所示的錯誤提示信息,提示我們不能訪問類中私有(private)的成員變量和成員函數。

圖1 在類的外部訪問類中私有成員變量提示出錯

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved