- 構造化プログラミング
プログラム=データ構造+アルゴリズム
- プログラムは、グローバル変数と相互に呼び出す多くの関数で構成されています
- アルゴリズムは、データ構造を操作する関数の形で提示されます
短所:関数とデータ構造が直接接続されていない。プログラムのサイズが大きくなると、プログラムが理解しにくくなります。たとえば、特定のデータ構造で動作している関数はどれですか。関数はどのデータ構造で動作しますか?2つの関数間の呼び出し関係は何ですか?
- カプセル化と非表示の概念はありません。変数を変更する場合は、ソース文を見つける必要があります。これは、保守と拡張に役立つものではありません。
- 確認しにくい
再利用:同じ機能を持つコードブロックがすでに存在し、構造化プログラムは再利用に役立ちません。
- オブジェクト指向プログラミング
オブジェクト指向プログラム=クラス+クラス+クラス+ ...
- 特定のタイプの客観的なモノの一般的な特性を要約してデータ構造を形成します(複数の変数を使用してモノのプロパティを記述できます)
- Thingが実行できるアクションを要約して、データ構造を操作できる関数を作成します(抽象化)
データ構造と操作メソッドクラスをバンドルします。これはカプセル化です。
オブジェクト指向には、抽象化、カプセル化、継承、ポリモーフィズムの4つの基本的な特性があります。
- クラスとオブジェクト
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();
}
オブジェクトのメモリ割り当て
- オブジェクトが占有するメモリ空間は、すべてのメンバー変数のサイズの合計に等しく、メンバー関数はオブジェクトのメモリに配置されません。
- 各オブジェクトには独自のストレージスペースがあります
メンバー関数とメンバー変数メソッドを使用する
- オブジェクト。メンバー変数/メンバーメソッド
- ポインター->メンバー名
rectangle r1(10,20),r2; rectangle* p =&r1; p->displace();
- 参照名。メンバー名
アクセス可能な範囲
- プライベート(デフォルト)、クラス外からはアクセスできません。プライベートメンバーを設定するメカニズムは非表示と呼ばれます。アクセスする場合は、メンバー関数を渡す必要があります。
- 公衆
- 保護された
メンバー関数のオーバーロードとパラメーターのデフォルト
はい、メンバー関数はオーバーロードすることもでき、パラメータのデフォルトは省略されます...(あいまいさの問題は回避してください)
int val(int x = 0) ;
void val() ;
//这样可能会二义性