程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 2013級C++第4周(春)項目——再和對象找感覺

2013級C++第4周(春)項目——再和對象找感覺

編輯:C++入門知識

課程主頁在:http://blog.csdn.net/sxhelijian/article/details/11890759,由課程主頁,可以看到完整教學方案,所有參考解答


  有網友在我的博客中,在2011級的頁面上留言問:“老師,為什麼有的學生寫著寫著就不更新了呢?”這是我常想起來的痛。我沒有能夠讓我的弟子們開成習慣,這是要我們大家一起解決的問題。
  有些同學近日的低迷,讀讀《大學、軟件外包》可能會有啟發。生命的流程走上了這條分支,就在這條分支上前行。
  在BB平台恢復正常之前,上機材料全從老師CSDN博客的課程主頁下載。指導書中已經提供了源代碼的,從博客中直接復制,以節約時間。

【項目0-掌握有對象的程序結構】不要求寫報告
   按照封裝與信息隱藏的原則,除非特別需要,類中的數據成員需要設置為私有。由此帶來的問題是,在類外如何訪問這些私有成員?下面4段程序概括了常用的方法。請仔細閱讀下面的程序,在閱讀過程中,畫出對象、變量在內存中的表示圖,寫出這些程序的運行結果(包括變量的變化過程及程序的最終輸出),達到徹底理解這些機制的目標。
(1)通過公共函數為私有成員賦值

#include 
using namespace std;
class Test
{
private:
    int x, y;
public:
    void setX(int a)
    {
        x=a;
    }
    void setY(int b)
    {
        y=b;
    }
    void printXY(void)
    {
        cout<<"x="<
(2)利用指針訪問私有數據成員
#include 
using namespace std;
class Test
{
private:
    int x,y;
public:
    void setX(int a)
    {
        x=a;
    }
    void setY(int b)
    {
        y=b;
    }
    void getXY(int *px, int *py)
    {
        *px=x;    //提取x,y值
        *py=y;
    }
};
int main()
{
    Test p1;
    p1.setX(3);
    p1.setY(5);
    int a,b;
    p1.getXY(&a,&b);  //將 a=x, b=y
    cout<
(3)利用函數訪問私有數據成員
#include 
using namespace std;
class Test
{
private:
    int x,y;
public:
    void setX(int a)
    {
        x=a;
    }
    void setY(int b)
    {
        y=b;
    }
    int getX(void)
    {
        return x;   //返回x值
    }
    int getY(void)
    {
        return y;   //返回y值
    }
};
int main()
{
    Test p1;
    p1.setX(3);
    p1.setY(5);
    int a,b;
    a=p1.getX( );
    b=p1.getY();
    cout<
(4)利用引用訪問私有數據成員
#include 
using namespace std;
class Test
{
private:
    int x,y;
public:
    void setX(int a)
    {
        x=a;
    }
    void setY(int b)
    {
        y=b;
    }
    void getXY(int &px, int &py) //引用
    {
        px=x;    //提取x,y值
        py=y;
    }
};
int main()
{
    Test p1,p2;
    p1.setX(3);
    p1.setY(5);
    int a,b;
    p1.getXY(a, b); //將 a=x, b=y
    cout<
【項目1 - 三角形類1】下面設計一個三角形類,請給出各成員函數的定義
#include
#include
using namespace std;
class Triangle
{
public:
	void setABC(double x, double y, double z);//置三邊的值,注意要能成三角形
	void getABC(double *x, double *y, double *z);//取三邊的值
	double perimeter(void);//計算三角形的周長
	double area(void);//計算並返回三角形的面積
private:
	double a,b,c; //三邊為私有成員數據
};
int main()
{
	Triangle tri1;	//定義三角形類的一個實例(對象)
	tri1.setABC(4,5,6);	//為三邊置初值
	double x,y,z;
	tri1.getABC (&x,&y,&z);   //將三邊的值為x,y,z賦值
	cout<<"三條邊為:"<
【項目2 - 三角形類2】程序功能同項目1,main()函數如下,請重新定義Triangle類,其中邏輯特別簡單的set和get成員函數,要處理為內置成員函數,直接在類內定義。
int main()
{
    Triangle tri1;	//定義三角形類的一個實例(對象)
    double x,y,z;
    cout<<"請輸入三角形的三邊:";
    cin>>x>>y>>z;
    tri1.setA(x);
    tri1.setB(y);
    tri1.setC(z);	//為三邊置初值
    if(tri1.isTriangle())
    {
        cout<<"三條邊為:"<
【項目3 - 程序的多文件組織】
一、多文件組織的必要
  當程序規模變大後,一個程序用多個文件組織,便於組織生產。這樣,不必每次都重復對所有代碼進行編譯,而只需編譯一次即可。把編譯後所形成的目標文件保存起來,以後在需要時把它調出來直接與程序的目標文件相連接即可。
  C++中一種常用的做法是,獨立出一個頭文件(.h)來。正確使用頭文件帶來的好處包括:
支持代碼的局部單獨編譯,尤其對類及成員函數聲明;保證所有文件使用給定實體的同一聲明;當聲明需要修改時,只有頭文件需要更新。  使用頭文件的時候,頭文件只用於聲明,而不是定義,頭文件一般含有支持分別編譯所需的類定義及變量和函數的聲明。
  頭文件中聲明過的類、函數,在另外一個源程序文件(.cpp)中實現。
  類的成員函數定義在頭文件中只有一個例外,那就是內置(inline)成員函數需要定義在頭文件中。
  另外,一些const對象要定義在頭文件中。
二、Code::Blocks中多文件項目的建立
  1、先建立項目(Project)
  建好的項目只有一個源文件。在這個文件中,包含有main()函數。
  2、維護項目中的各種文件
  在菜單中選擇File - New - File...,出現如圖1所示的窗口,可以加入頭文件(header),也可以加入源文件(source)。

  \
              圖1 新建文件 <喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cD48YnIgLz48L3A+PHA+oaGhobC0z/K1vLXE1rjKvr2owaLOxLz+o6zNvDLP1Mq+tcTKx9PQwb249tS0zsS8/qGi0ru49s23zsS8/rXEz+7Ev73hubmhozwvcD48cD48L3A+PHA+oaGhoTxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140317/20140317091121318.jpg" alt="\" />
         圖2 多文件的項目結構


  頭文件中做聲明,源文件中做定義。在需要的位置,如:#include "Triangle.h"(圖2中)。include後用引號,優先在當前文件夾下找包含的文件,而用 <> 符號,是要到系統包含文件夾中找包含文件。

  用鼠標右擊項目名,有Add files...和Remove files...等菜單選項,可以完成多文件項目的組織。

三、項目3的實踐內容
  利用多文件組織,重新實現項目2。其中,整個項目包括3個文件:
主文件: main.cpp,用於定義main()函數頭文件: triangle.h,頭文件,聲明類,定義內置成員函數類定義文件: triangle.cpp,用於定義類Triangle中其他成員函數  注意,將3個set函數和3個get函數設計成內置成員函數,其他函數不作為內置函數。
  
【項目4 - 數組作數據成員】閱讀教材P255例8.4,注意到類中的數據成員可以是數組。設計一個工資類(Salary),其中的數據成員如下類的聲明。
class Salary   
{
public:         
	void set_salarys( );     //(1) 
	void add_salarys(int x); //(2)   
	void sort_salarys();      //(3)
	void show_salarys( );     //(4) 
private:
	double salarys[50]; //工資 
	int number;			//實際人數  
};
  請設計成員函數實現下面的功能:
  (1)輸入職工工資,工資保存到salary數組中,實際人數保存到number[]中(輸入-1標志著工資輸入結束);
  (2)給每個人漲500元工資(add_salarys是有參函數,在調用時,500當實參);
  (3)對漲後的工資進行排序;
  (4)輸出排序後的工資。
  (5)在main函數定義Salary類的對象,調用你自己設計好的成員函數,完成相關的工作。
【項目4擴展1(選做)】

  使用salary[50]有限制,實際人數少時,會浪費空間,人數多了,無法完成任務。在main()中先輸入職工人數,作為參數傳遞給輸入職工工資的成員函數,然後利用教材P217所講的動態分配內存的運算符new,開辟一個大小正好的連續空間,完成上面的工作。

【項目4擴展2(選做)】 下載salary.txt文件

  手工輸入工資?!太讓人不能忍受了。現給出包含了不足500個職工工資的文件salary.txt,從文件中讀數據,完成上面的工作。

【項目4擴展3(選做)】

  增加一個成員函數,將排序後結果保存到一個文件中。

【項目4擴展4(選做)】將項目4用多文件的方式組織起來。


    

  \china-pub(正在發售)
卓越網(接受預訂)
圖靈社區 官方試讀本下載
豆瓣

==================== 迂者 賀利堅 CSDN博客專欄=================

|==  IT學子成長指導專欄  專欄文章分類目錄(不定期更新)    ==|

|== C++ 課堂在線專欄   賀利堅課程教學鏈接(分課程年級)   ==|

======== 為IT菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 =======

  
    





  

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