Ⅰクラスとオブジェクト②

2.3コピーコンストラクタ

2.3.1機能

前のオブジェクトのデータを新しいオブジェクトに割り当てます

コピー関数(仮パラメーター)は、このクラスのオブジェクトへの参照&

2.3.1いつ使用されますか?

 

 

 

2.4浅いコピーと深いコピー

 

sの内容を変更すると、それに応じてscopyも変更されます。コピー済みとコピーなしの違いは何ですか?

理由:2つのポインターが同じ場所を参照しているため、メモリ領域は変更されていません(s = sObj.s;)

 

 2つは異なる場所を参照します。sとnew charは新しい場所を持ち、sの変更によって変更されません。

例1:デザインサークル

 

#include <iostream>
 using  namespace std; 

const  float PI = 3.1416 ; 

クラスCCircle 
{ 
    float x、y; 
    未署名の長いclr;
    float r;
public 
    CCircle(float _x = 0float _y = 0float _r = 0、unsigned long _clr = 0x00FF00 ):x(_x)、y(_y)、clr(_clr)、r(_r)
    {                         // 构造関数数、鵺认初始化、
    }
     doubleGetArea()
    {
         PI * r * rを返す; 
    } 
    double GetPerimeter()
    { 
        return  2 * PI * r; 
    } 
    void Move(float dx、float dy)
    { 
        x + = dx; 
        y + = dy; 
    } 
    void Scale(float s)
    { 
        r = s * r; 
    } 
    void Draw()
    { 
        cout << " Circle:" << x <<" " << y << " " << r << endl; 
    } 
}; 

int main()
{ 
    CCircle myCircle(300.0f400.0f1.5f0xFF0000 ); 

    myCircle.Move(3.0f4.0f ); 
    myCircle.Scale(2.0f ); 

    myCircle.Draw(); 

    cout << myCircle.GetPerimeter()<< " " << myCircle.GetArea()<< endl; 

    0を返し ます
}

 

書式#include <iostreamの> 
の#include <graph2d.h>    // 教師が書いた、強力なああです、私自身、いくつかは使用しません
使用して 名前空間はstdを、
 使用して 名前空間グラフ;   //は、このようなemmm。

クラスCCircle 
{ 
    float x、y; 
    unsigned long clr;
     float r;
 public 
    CCircle(float _x = 0float _y = 0float _r = 0、unsigned long _clr = 0x00FF00 ):x(_x)、y(_y) 、clr(_clr)、r(_r)
    { 
    } 
    double GetArea()
    {
         PI * r * rを返す; 
    } 
    double GetPerimeter()
    { 
        return  2 * PI * r; 
    } 
    void Move(float dx、float dy)
    { 
        x + = dx; 
        y + = dy; 
    } 
    void Scale(float s)
    { 
        r = s * r; 
    } 
    void Draw()
    { 
        setColor(clr); 
        fillCircle(x、y、r); 
    } 
}; 

CCircle myCircle( 30040050.5f0xFF00FF)。  // 布吉岛啥意思

void display()
{ 
    myCircle.Draw(); 
} 

ボイドキーボード(符号なし文字のキー)
{ 
    スイッチ(キー)
    { 
    ケース ' W ' 
        myCircle.Move(05 )。
        休憩;
    ケース ' s ' 
        myCircle.Move(0-5 );
        休憩;
    ケース ' ' 
        myCircle.Move( - 50 );
        休憩;
    ケース' D ' 
        myCircle.Move(50 );
        休憩;
    ケース' z ' 
        myCircle.Scale(1.05 );
        休憩;
    ケース' x ' 
        myCircle.Scale(0.95 );
        休憩; 
    } 
} int   

 main()
{ 
    myCircle.Move(3.0f4.0f ); 
    myCircle.Scale(2.0f ); 

    cout << myCircle.GetPerimeter()<< " " << myCircle.GetArea()<< endl; 
    initGraph(ディスプレイ、キーボード); 
    0を返し ます
}

 

 

 

 ## 1.構造と機能

 

 ##次に、座標系と関数の命名

関数の命名は、ラクダスタイルの命名法を採用しています。つまり、関数名が1つ以上の単語で接続されている場合、最初の単語は小文字で始まり
、次の単語の最初の文字は大文字になります。これは、上記のディスプレイ座標系のshowCoordinate関数に示されています。

座標系は正常で、原点は左下隅にあります

Escを押してインターフェースを終了し、F1を押してヘルプ情報を表示し、F2を押して座標系を表示し、「q」を押してウィンドウと全画面
切り替えます

## 3.操作メカニズム

コールバック関数:

関数1のポインターはパラメーターとして関数2に渡され、関数1は関数2の操作によって制御されます。

ユーザーが直接呼び出すのではなく、特定のイベントまたは条件が発生すると(キーボードの押下、マウスのクリックなど)、
オペレーティングシステムがメッセージを呼び出し、関数にメッセージを送信して、イベントまたは条件に応答します。

 

おすすめ

転載: www.cnblogs.com/syzyaa/p/12690894.html