C ++:エッセイ4-オブジェクト

クラスはモデルであり、このクラスのインスタンスを作成するとき、それはオブジェクト自体です。

オブジェクト内には変数と関数が存在する可能性があり、構造は通常、さまざまな変数で構成されています。オブジェクトは構造と多くの類似点がありますが、オブジェクトは独自の機能を持つこともできます。

クラスは変数と関数で構成され、オブジェクトが情報を格納するために使用する変数と、操作を完了するために呼び出す関数があります。したがって、クラス内の変数が属性になり、関数がメソッドになるのが通例です。

OOP(オブジェクト指向プログラミングプロセス):

最初のステップ:クラスを作成します(各クラスには変数のような名前があり、クラス名の最初の文字は通常大文字になります)

「::」スコープリゾルバは、このメソッドが存在する場所、またはメソッドが属するクラスをコンパイラに通知するために使用されます。

std :: coutが参照するのはstdによって定義されたcoutであり、std :: stringデータタイプは実際にはオブジェクトです。

class Car
{
  public ://(public这个关键词实际上就是作用域的问题)
    std::string color;
    std string eigine;
    float gas_tank;
    unsigned int Wheel;
//方法的声明(写在类里面)
    void fill_Tank(float liter);//只有一个参数,不需要返回值
    void running(void);//不需要返回类型,不需要参数
//方法的定义通常安排在类声明的后面
};//可以直接在这个后边定义类的对象Car(但是一般呢不这样用,将声明和定义是分开的)。
//方法的定义通常安排在类声明的后面
void Car::fill_Tank(float liter)//::是作用域解析符(是在说fill_Tank这个函数是在Car这个类里边的)
{
   gas_tank += liter;
}
int main()
{
   Car mycar;//使用Car这个类定义一个变量mycar(在创建类的对象时,也可以像结构那样直接在大括号后边进行定义),一个具体实例。拥有方法和属性
   mycar.gas_tank=85;

   return 0;
}

PS:クラスの宣言とクラスの機能の定義を2つの異なるファイルに保存できます。宣言は.hヘッダーファイルに、定義は対応する.cppファイルに保存できます。

C ++では、クラスで定数を宣言できますが、それに値を割り当てることはできません。

同じタイプの別のオブジェクトにオブジェクトを割り当てると、同じ名前の属性が自動的に同じ値になります。

class Car
{
  public:
     const float TANKSIZE=85;//这样会出错。
}
//绕开这一限制的方法就是创建一个静态常量
class Car
{
  public:
     static const float TANKSIZE=85;//这样会出错。
};
Car car1,car2;
car2=car1;//把一个对象赋值给另一个同类的对象将会自动使同名的的属性有同样的值。

概要:プログラム開発の最も基本的な手順:

(1)属性(変数)とメソッド(関数)を使用してクラスを定義します。(テンプレート)

(2)このクラスの変数を作成します。(成し遂げる)

- - - - - - - - - - - - -拡張

コンストラクタ:

1.コンストラクターと通常のメソッドの主な違い:

  • コンストラクターの名前は、それが含まれているクラスの名前と同じである必要があります。
  • システムが特定のクラスのインスタンスを作成すると、できるだけ早くこのクラスのコンストラクターが自動的に呼び出されます。
  • コンストラクターが値を返すことはありません。

2.コンストラクターを作成するには、彼の宣言をクラスに追加する必要があります。

class Car
{
   Car(void);
}

3.大文字と小文字がクラス名と一致していることに注意してください。宣言の終了後、コンストラクター自体の定義を開始します。

Car::Car(void)//因为构造器默认不会有任何返回值,所以我们不用写为 void Car::Car(void)
{
   color="white";
   engine="V8";
   wheel=4;
   gas_tank=FULL_GAS;
}

4.コンストラクターの役割はそれを初期化することです

class Car
{
   std::string color;
   std::string enigen;
   unsigned int gas_tank;
   unsigned int wheel;

   Car(void);
   void set color(std string col);
   void set enigen(std string eng);
   void set wheel(unsigned int whe);
   void fill tank(int liter);
   int running(void);
   void warning(void);
}
Car::Car(void)
{
    color="white";

}

5.オブジェクトの配列を作成します

配列は任意のデータタイプにすることができ、もちろんオブジェクトも含まれます。

Car mycar[10];//Car是类名,后边是一个数组
//调用的语法:
Mycar[x].running;//x表示给定数组元素的下标

6.各クラスには少なくとも1つのコンストラクターがあることに注意してください。クラスでコンストラクターを定義しない場合、コンパイラーは次の構文を使用してコンストラクターを定義します。

ClassName::ClassName(){}

デストラクタ:

オブジェクトを作成すると、システムは自動的に特別なメソッドであるコンストラクターを呼び出します。

オブジェクトを破壊するとき、システムは、対応する効果を達成するために別の特別なメソッド、つまりデストラクタも呼び出す必要があります。(一般的に、コンストラクターは事前初期化および準備作業(メモリの適用)を完了するために使用され、デストラクタは必要なクリーンアップ作業(メモリのクリア)を完了するために使用されます)

1.デストラクタは、コンストラクタ/クラスと同じ名前ですが、接頭辞「〜」が付いています。デストラクタが値を返すことはありません。デストラクタはパラメータを受け取らないため、デストラクタの宣言形式は常に〜ClassName()です。

class Car(void)
{
   Car();
   ~Car();
}
//析构器是不带参数的,所以析构器的声明格式永远是
~ClassName();

上記の例では、デストラクタはオプションです(この例では、メモリの適用と動的メモリの適用が含まれていなかったため、いくつかの変数に適用するだけで、変数は次のようになります。この関数は、オブジェクトが終了するとスタックメカニズムによって自動的に返されるため、処理する必要はありません。この新しい関数によって要求された動的メモリを使用する場合は、デストラクタで解放する必要があります。または、オブジェクトを開きます。このファイルは彼のメモリにも適用されます。たとえば、openfileに対応するclosefileが必要であり、それをそれぞれコンストラクタとデストラクタに書き込む必要があります)が、より複雑なクラスでは、デストラクタが非常に重要になることがよくあります。(メモリリークが発生する可能性があります。つまり、メモリを申請して使用しなかった場合、またはこのメモリを呼び出した後、クラスは削除されますが、メモリは解放されず、メモリ空間に配置されます。ファイルに保存してこのアドレスを保持します。誤ってこのアドレスにアクセスすると、メモリを読み取れないように見え、エラーダイアログボックスが表示されます)。たとえば、特定のクラスのコンストラクタがメモリの一部に適用される場合、デストラクタでこのメモリを解放します。

#include<iostream>
#include<string>
#include<fetream>
class StoreQuote
{
 publis:
    std::string quote,sperker;
    std::ofstream fileOutput;

    StoreQuote();//构造器
    ~StoreQuote();//析构器
  
   void inputQuote();
   void inputSpeaker();
   bool write();
};//类的声明
StoreQuote::StoreQuote()
{
    fileoutput.open("test.txt",std::ios::app);//类.方法()打开一个文件,app表示追加的形式打开
}
StoreQuote::~StoreQuote()
{
    fileOutput.close();//析构器里边对它进行关闭
}
void StoreQuote::inputQuote()
{
   std::getline(std::cin,quote);//写入这句话,把他写进quote这个字符串里边
}
void StoreQuote::inputSpeaker()
{
   std::getline(std::cin,speaker);//写入作者,把他写入speaker这个字符串里边
}
bool StoreQuote::write()//把刚才的两个给写入文件里边
{
   if(fileOutput.is_open())
   {
      fileOutput<<qupte<<"i"<<speaker<<"\n";
      return true;
   }
   else
   {
      return false;
   }
}
int main()
{
   StoreQuote quote;
   std::cout<<"请输入一句话:\n";
   quote.inputQuote();//调用这个函数
  
   std::cout<<"请输入作者:\n";
   quote.inputSpeaker();
   if(quote.write())//判断是否成功的写入文件
   {
      std::cout<<"成功写入文件";
   }
   else
   {
      std::cout<<"写入文件失败":
      return 1;
   }
   return 0;//main函数的默认返回值

}

 

おすすめ

転載: blog.csdn.net/m0_37957160/article/details/108869588