学習の最初の週:クラスとオブジェクトの基本概念と使用法

  1. 構造化プログラミング

プログラム=データ構造+アルゴリズム

  • プログラムは、グローバル変数と相互に呼び出す多くの関数で構成されています
  • アルゴリズムは、データ構造を操作する関数の形で提示されます

短所:関数とデータ構造が直接接続されていない。プログラムのサイズが大きくなると、プログラムが理解しにくくなります。たとえば、特定のデータ構造で動作している関数はどれですか。関数はどのデータ構造で動作しますか?2つの関数間の呼び出し関係は何ですか?

  • カプセル化と非表示の概念はありません。変数を変更する場合は、ソース文を見つける必要があります。これは、保守と拡張に役立つものではありません。
  • 確認しにくい

再利用:同じ機能を持つコードブロックがすでに存在し、構造化プログラムは再利用に役立ちません。

  1. オブジェクト指向プログラミング

オブジェクト指向プログラム=クラス+クラス+クラス+ ...

  • 特定のタイプの客観的なモノの一般的な特性を要約してデータ構造を形成します(複数の変数を使用してモノのプロパティを記述できます)
  • Thingが実行できるアクションを要約して、データ構造を操作できる関数を作成します(抽象化)

データ構造と操作メソッドクラスをバンドルします。これはカプセル化です。
オブジェクト指向には、抽象化、カプセル化、継承、ポリモーフィズムの4つの基本的な特性があります。

  1. クラスとオブジェクト

1)客観的なものからクラスを抽象化する

eg.矩形,则成员变量为长、宽,成员函数有计算面积、周长、
设置长宽、以及displace。
#include<iostream>
class rectangle
{
    
    
	private:
		double length;
		double width;
	public:
		rectangle(double a=0,double b=0):length(a),width(b){
    
    }
		double area(){
    
    return (length*width);};
		double perimeter(){
    
    return 2*(length+width);}
		void displace();
}; 

void rectangle::displace()
{
    
    
	std::cout<<"Area is "<<area()
	<<", perimeter is "<<perimeter()<<std::endl;
}

int main()
{
    
    
	rectangle r1,r2(10,20);
	cout<<r1.area()<<endl;     
	r2.displace();
}

オブジェクトのメモリ割り当て

  • オブジェクトが占有するメモリ空間は、すべてのメンバー変数のサイズの合計に等しく、メンバー関数はオブジェクトのメモリに配置されません。
  • 各オブジェクトには独自のストレージスペースがあります

メンバー関数とメンバー変数メソッドを使用する

  1. オブジェクト。メンバー変数/メンバーメソッド
  2. ポインター->メンバー名
rectangle r1(10,20),r2;
rectangle* p =&r1;
p->displace();
  1. 参照名。メンバー名

アクセス可能な範囲

  1. プライベート(デフォルト)、クラス外からはアクセスできません。プライベートメンバーを設定するメカニズムは非表示と呼ばれます。アクセスする場合は、メンバー関数を渡す必要があります。
  2. 公衆
  3. 保護された

メンバー関数のオーバーロードとパラメーターのデフォルト

はい、メンバー関数はオーバーロードすることもでき、パラメータのデフォルトは省略されます...(あいまいさの問題は回避してください)

int val(int x = 0) ;
void val() ; 
//这样可能会二义性

おすすめ

転載: blog.csdn.net/ZmJ6666/article/details/108548666