C ++の機能抑制、コンストラクタ、デストラクタ、シャローコピー

列をなして

//インライン関数を宣言し、実装し、それは同じファイルである必要がありますすることができます
//インライン関数は、ヘッダファイルと実装ファイルに分けることができません


追加インラインint型(Xはint、int型Y)
{//通常ループ置かないでください
  リターンX + Yを;
}

//それは、カスタムクラス型である場合は、最初の文字を大文字にしなければならない
クラスのコンピュータ
{
公共の://パブリックメンバは、クラスの外にアクセスすることができ
、外部インターフェース、機能、サービスとして知られているクラスの//パブリックメンバー

  こぶを使用して//メンバ関数モードという名前
  のボイドsetBrand(のconst char型*ブランド)
  {

     strcpyの(_brand、ブランド);
  }

  空setPrice(ダブル価格)
  {
    _price =価格。
  }

//保護://保護されたメンバーは、クラス外部からアクセスすることができない
  ボイドプリント()
  {
    COUT << "ブランド" << ENDL << _brand
      << "価格" << ENDL << _price;
  }

クラスの底部にできるだけ//プライベートメンバー
プライベート://プライベートメンバーはクラス外でアクセスすることができない
  チャー_brand [20]; // brand_ / m_brand
  ダブル_price;
};


クラスの宣言と定義

 

//クラスの宣言
クラスのコンピュータ
{  

//デフォルトのアクセスのクラスがプライベートで

公共:
  無効setBrand(のconstのchar *ブランド);
  空setPrice(ダブル価格)。
  無効印刷();

//プライベートプロパティを通じてキーワードパフォーマンスパッケージ
プライベート:メンバーに関連するデータのみによって占め//クラスオブジェクト空間、
プログラム・コードおよび空間オブジェクト//メンバ関数のストレージを占有しません


  チャー_brand [20]。
  ダブル_price;
}。

//クラスの実装
ボイドコンピューター:: setBrand(のconstのchar *ブランド)
{
  strcpyの(_brand、ブランド);
}

空コンピューター:: setPrice(ダブル価格)
{
  _price =価格。
}

空コンピューター::プリント()
{
  coutの<< "ブランド:" << _brand <<てendl
    << "価格:" << _price <<てendl;
}


コンストラクタデストラクタ

 

クラスコンピューター
{
パブリック:
  コンピュータ(のconstのchar *ブランド、ダブル価格)
  :_brand(新しいのchar [strlenを(ブランド)+ 1]())//浅拷贝、只传地址
  、_price(価格)
  {
    strcpyの(_brand、ブランド);
    裁判所未満<< "コンピュータ(のconst char型*、ダブル)" <<てendl;
  }

  無効印刷()
  {
    coutの<< "ブランド:" << _brand <<てendl
      << "価格:" << _price <<てendl;
  }

  自動的にデストラクタコールするプロセスオブジェクトで破壊//
  の@
  @を:デストラクタオブジェクトの実装が破壊される

  0 #IF
  ボイドリリース()
  {
    []削除_brand;
  }
  #endifの

  コンピュータ〜()
  {   //デストラクタ関数:オブジェクトがリソース要求を再利用することである
    (_brandが){IF
      削除[] _brand;
      _brand = nullptr A; // NULL
    }
    COUT << "コンピュータ〜()" << ENDL;
  }

プライベート:
  CHAR * _brand。
  ダブル_price;
}。

//コンピュータPC2( "小米科技"、7500);

int型TEST0(無効)
{
  {
    コンピュータPC1( "MateBook"、6666);
    裁判所未満<< ">> PC1:" <<てendl;
    pc1.print();
  }

  裁判所未満<< ">> PC2:" <<てendl;
  // pc2.print();

  破壊//ヒープ領域のオブジェクトは、手動で実行する必要がある
  * =新しい新PC3コンピュータ(の"ThinkPad"、7777)コンピュータ;
  coutの<< ">> PC3:" <<てendl;
  PC3->印刷();

  PC3を削除; //実行中に、忘れてはいけない表現を削除し、それがデストラクタを呼び出します。

  静的なコンピュータPC4( "MacBook Proの"、20000);
  裁判所未満<< ">> PC4:" <<てendl;
  pc4.print();

  0を返します。
}

test1のボイド()
{
  コンピュータ・コンピュータPC3新新=( "ThinkPadの"、7777);
  COUT << ">> PC3:" <<てendl;
  PC3->印刷();
  PC3->〜コンピュータ(); //このステートメントが実行された後、オブジェクトはで破壊されていない
  削除PC3;
}

TEST2ボイド()
{
  コンピュータPC1( "MateBook"、6666);
  COUT << ">> PC1:" <<てendl;
  pc1.print();
  PC1〜コンピュータ(); //デストラクタアクティブコール。しかし、これはお勧めできません
  //デストラクタが自動的に実行させるべきである
  。//pc1.releaseを()
}


 コピーコンストラクタ


クラスコンピューター
{
パブリック:
  コンピュータ(のconstのchar *ブランド、ダブル価格)
    :_brand(新しいのchar [strlenを(ブランド)+ 1]())
    、_price(価格)
  {
    strcpyの(_brand、ブランド);
    裁判所未満<< "コンピュータ(のconst char型*、ダブル)" <<てendl;
  }

//システムがニーズを満たしていない提供して
  0の#if
  コンピュータ(のconstコンピュータ&RHS)
    _brand(rhs._brand)//シャローコピー、唯一の転送アドレス
    、_price(rhs._price)
  {
    COUT <<「コンピュータ(のconst&コンピュータ)「<< ENDL;
  }
  #endifの
  コンピュータ(CONSTコンピュータ&RHS)
    _brand(新しい新しいCHAR [strlenを(rhs._brand)。+ 1]())
    、_price(rhs._price)
  {
     strcpyの(_brand、rhs._brand) ;
    COUT << "コンピュータ(コンピュータのconst&)" <<てendl;
  }

  ボイドプリント()
  {
    のprintf( "ブランド=%Pを\ n"、_brand)。
    裁判所未満<< "ブランド:" << _brand <<てendl
      << "価格:" << _price <<てendl;
  }

  〜コンピュータ()
  {
    delete []を_brand。
    裁判所未満<< "〜コンピュータ()" <<てendl;
  }

プライベート:
  CHAR * _brand。
  ダブル_price;
}。

空TEST0()
{
  コンピュータPC1( "MateBook"、6666);
  裁判所未満<< ">> PC1:" <<てendl;
  pc1.print();

  //新しいオブジェクトがすでに別の存在でのオブジェクトの初期化
  、コンピュータPC1 PC2 =
  <<てendl;:COUT << ">> PC2"
  pc2.print()を;
}

 

おすすめ

転載: www.cnblogs.com/Davirain/p/11770257.html