C++プログラミング-3週目に初めてオブジェクトを見た

5876 ワード

コースのトップページアドレス:http://blog.csdn.net/sxhelijian/article/details/7910565
第一部の予備知識はプログラム設計の面で、私たちは対象のある時代に入った.悪いニュースは、私たちは考え方と表現の面でもっと変える必要があります.良いニュースは、新しい方法が私たち人類の本来の思考パターンに近いことです.それに、自分を変え続け、私たちの勉強自体を変えるのもワクワクします.
教材のこの部分は概念を重視しているため、展示プログラム自体の形態に不足しているので、授業の後、まず教材の関連部分を読んでください.次に,以下のプログラムを読むことにより,授業,教材で述べた知識を再現し,対象プログラム向けの基本構造,およびプログラム中の基本要素を認識する目的を達成する.
次のプログラムを読んで、要求通りに質問に答えます.
(1)最初のオブジェクト向けプログラム
#include <iostream>
using namespace std;
{
private:
	int num;
	char name[20]; 
	char sex;     
public:
	void set_data(int n, char *p,char s)
	{
		num=n; 
		strcpy(name,p);
		sex=s;
	}
	void display( )     
	{
		cout<<"num: "<<num<<endl;
		cout<<"name: " <<name<<endl; 
		cout<<"sex: " <<sex<<endl;   
	} 
};
int main()
{	Student stud1,stud2; 		//(1) 
	stud1.set_data(1,"He",'f');	//(2)
	stud2.set_data(2,"She",'m');	//(3)
	stud1.display();			//(4)
	stud2.display();			//(5)
	return 0; 
}
プログラムに次の内容を表示するか、質問に答えてください.
  • クラス宣言;
  • オブジェクト定義;
  • クラスのプライベートメンバー.
  • クラスの共通メンバー.
  • クラスのデータ・メンバー.
  • クラスのメンバー関数.
  • メンバー関数set_data()では、どのデータメンバーが参照されますか?
  • プログラム実行後、画面出力は__?
  • main()関数の文(1)の後、stud 1.display()を呼び出す.どのような結果になりますか?
  • main()関数の文(3)の後、stud 2.sex='f'を呼び出す.結果は___?どうしてこんなことになったの?
  • main()関数の文(3)の後にstud 2.sex='f'を呼び出す場合.stud 2オブジェクトの性別を'f'に変更することを保証するには、プログラムはどのように変更しますか?

  • (2)第2のオブジェクト向けプログラム——このような形式でオブジェクト向けプログラムを書くことを提唱する.
    #include  <iostream>
    using namespace std;
    class Student
    {
    public:   
    	void set_data(int n, char *p,char s);
    	void display( );
    private: 
    	int num;
    	char name[20];     
    	char sex;     
    };
    
    
    void Student::set_data(int n, char *p,char s)
    {	num=n; 
    	strcpy(name,p); 
    	sex=s;
    }
    void Student::display( )     
    {	cout<<"num: "<<num<<endl;
    	cout<<"name: " <<name<<endl; 
    	cout<<"sex: " <<sex<<endl;   
    } 
    int main()
    {	Student stud1,stud2;
    	stud1.set_data(1,"He",'f');
    	stud2.set_data(2,"She",'m');
    	stud1.display();
    	stud2.display();
    	return 0;
    }
    次の質問を観察し、考え、答えてください.
  • プログラムは全体の構造にどんな特徴がありますか?
  • クラス定義で、共通メンバーが前、プライベートメンバーが後の場合、どのようなメリットがありますか?
  • メンバー関数の実装はクラス定義の外に書かれていますが、どのようなメリットがありますか?
  • メンバー関数の実装をクラスの外に書くときの書き方にどのような特徴があるのか、自分でまとめてみましょう.
  • void Studio::display()がvoid display()として書かれている場合、結果は___?
  • sizeof(stud 1)値は___?

  • (3)上記の2つのプログラムを読んだ上で、次の基本概念を再び深く体得する
  • はクラスを宣言し、同じ構造のオブジェクトのセットを定義することができる.クラスはオブジェクトの抽象であり、オブジェクトはクラスのインスタンスである.
  • クラス/オブジェクトには、データメンバーとメンバー関数の2つの部分が含まれています.クラス/オブジェクトは、プログラム設計で説明するエンティティのカプセル化処理を実現します.関連するデータと操作コードを1つのオブジェクトにカプセル化し、プログラム内のstud 1とstud 2などの各オブジェクト間が相対的に独立し、互いに干渉しない基本単位を形成します.
  • 情報隠蔽(imformation hiding)--オブジェクトの一部(private限定子を介して)を外部に隠蔽する.すなわち、内部の詳細を隠蔽し、外部と連絡し、外部のメッセージを受信するために少量のインタフェースしか残っていない.
  • パッケージと情報隠蔽の利点:オブジェクトの一部の属性と機能を外部に遮蔽し、外部からは見えない、さらには知らない、データの安全に有利であり、関係のない人がデータを理解し、修正することを防止する.同時に、操作オブジェクトの複雑さを大幅に低減します.

  • 第二部分のアップロード実践
    【項目1-】上で読んだ2番目のプログラムをデバッグ
    (1)単一ステップで実行し、その実行過程を観察し、オブジェクトの値を表示することを学ぶ.
    (2)突き違いにより,プログラムにエラーが発生した場合の様々な表現を観察する.
  • はパッケージの原則に違反し、私有メンバーに直接値を付与し、私有オブジェクトにアクセスする.
  • クラスメンバー関数の実装時に役割ドメインを指定しない.
  • stud 1.set_を呼び出すdata()関数の場合、実パラメータに不適切なタイプが現れます.
  • あなたが考えることができる他の「悪い」アイデア......
  • 【プロジェクト2-干ばつ場を修理する】(Circle類)円形の干ばつ場で、敷地内にセメントを塗り、造価は1平方メートル当たり20元、フェンスは木で囲まれ、1メートル当たり35元である.Circleクラスを設計し,円の面積と辺長を求めることができ,さらに干ばつ場の等価を求めることをサポートする.次のプロンプトに基づいてプログラムを完了してください.必要な作業は、(1)クラス宣言で関連する共通メンバー関数を宣言すること.(2)クラス宣言とmain()関数の間で、宣言されたメンバー関数を定義します.
    class Circle
    {private:
    	double radius;
    };
    int main()
    {	double r;
    	cout<<"         : ";
    	cin>>r;
    	Circle c;
    	c.setRadius(r);
    	cout<<"        "<<20*c.area()+35*c.circumference()<<"  。"<<endl;
    	return 0;
    }

    【項目3-時間類】プログラムを読み、実行した後、要求に応じてクラスの機能を追加する
    /*
     *            
    */
    #include <iostream>
    using namespace std;
    class Time
    {
    public:
    	void set_time( );   
    	void show_time( );  
    private: 
    	bool is_time(int, int, int);
    	int hour;
    	int minute;
    	int sec;
    };
    void Time::set_time( ) 
    {	char c1,c2;
    	cout<<"     (  hh:mm:ss)";
    	while(1)
    	{	cin>>hour>>c1>>minute>>c2>>sec;
    		if(c1!=':'||c2!=':')
    			cout<<"     ,     "<<endl;
    		else if (!is_time(hour,minute,sec))
    			cout<<"    ,     "<<endl;
    		else 
    			break;
    	}
    }
    void Time::show_time( )      
    {	cout<<hour<<":"<<minute<<":"<<sec<<endl;
    }
    bool Time::is_time(int h,int m, int s)
    {	if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)
    		return false;
    	return true;
    }
    int main( )
    {	Time t1;  
    	Time &t2=t1;
    	t1.set_time( );   
    	t2.show_time( );
    	return 0;
    }

    要件:元のクラスに基づいて、次のメンバー関数を追加し、最初の3つを内蔵関数として設計し、main()数に適切な呼び出しを追加して、クラス定義を拡張した機能を示すようにしてください(一度に実行することが望ましい).
  • add_a_sec()  //1秒増加
  • add_a_minute()/1分増し
  • add_an_hour()/1時間増加
  • add_seconds(int)/n秒
  • 増加
  • add_minutes(int)/n分
  • 増加
  • add_hours(int)/n時間
  • 増加
    ヒント:増加後に値の範囲を超えた場合を考慮する
    【プロジェクト3拡張(オプション)】DateTimeクラスを設計できますか?実施してみましょう.
    【項目4-直方柱類】(教材P 262第6題より)あなたが読んだプログラムに倣い、対象に基づくプログラムを作成し、3つの直方柱(Bulk)の体積を求める.データ・メンバーには、長さ(length)、幅(width)、高さ(heigth)、ボリュームが含まれます.メンバー関数で次の機能を実現する必要があります.
    (1)キーボードから3つの直方柱の長さ、幅、高さを入力する.
    (2)直方柱の体積(volume)と表面積(areas)を計算する.
    (3)この3つの直方柱の体積と表面積を出力する.
    今周の任务の中でプログラムの形态は巨大な変化が発生して、习惯、熟知する前に、くれぐれも“真似”の方法で自分でしていくことを覚えています!
    レッスンのホームページは次のとおりです.http://blog.csdn.net/sxhelijian/article/details/7910565