C++学習ノート——クラスとオブジェクト——構造関数と構造関数

1664 ワード

C++のオブジェクトの初期化とクリーンアップは2つの重要な問題であるため、設計者たちは構造関数と解析関数を採用してこの2つの問題を解決し、この2つの関数コンパイラは自動的に呼び出し、オブジェクトの初期化とクリーンアップを完了します.クラスを設計するときに構造関数と構造関数を提供しない場合、コンパイラは空の実装の構造関数と構造関数を提供します.
コンストラクション関数:
役割:オブジェクトを作成するときにオブジェクトのメンバー属性に値を割り当て、コンパイラによって自動的に呼び出されます.
構文:class name(){}
1.コンストラクション関数の名前はクラス名と同じである.
2.戻り値もvoidも書かない.
3.コンストラクション関数にはパラメータがあり、リロードが発生することができる.
4.プログラムは、オブジェクトの作成時に構造を自動的に呼び出し、一度だけ呼び出す.
構造関数:
役割:オブジェクトが破棄される前にシステムが自動的に呼び出し、クリーンアップ作業を実行します.
構文:~class name(){}
1.構造関数名はクラス名と同じで、クラス名の前に~;
2.戻り値もvoidも書かない.
3.構造関数にパラメータがあってはいけないので、リロードは発生できません.
4.プログラムはオブジェクトの破棄時に構造関数を自動的に呼び出し、一度だけ呼び出す.
コンストラクション関数の分類と呼び出し:
パラメータによって、有参構造と無参構造に分けられます.
タイプによって、通常の構造とコピー構造に分けられます.
呼び出し方法:かっこ法、表示法、暗黙変換法.
次に、具体的な例を示します.
class Student{
public:
    Student(){
        cout<

コンストラクション関数呼び出し規則:
1.ユーザーがコンストラクション関数を定義した場合、c++はデフォルトの非コンストラクション関数を提供しませんが、デフォルトのコピーコンストラクション関数を提供します.
2.ユーザーがコピーコンストラクション関数を定義した場合、c++は他のコンストラクション含数を提供しません.
クラスを設計するときは、すべての構造関数を自分で実現したほうがいいです.
深いコピーと浅いコピー:
浅いコピーとは、単純な付与コピー操作を指し、深いコピーとは、スタック領域で空間を再申請し、コピー操作を行うことを指す.コンストラクション関数にヒープ領域でスペースを申請する操作(つまり、プロパティがヒープ領域で開かれている)がある場合は、コンストラクション関数をコピーし、深いコピーを使用してヒープ領域に新しい空間を再作成する必要があります.そうしないと、浅いコピーによる重複放出ヒープ領域の問題が発生します.
簡単な例を次に示します.
class Student{
public:
    Student(){
        cout<

C++は、初期化リストを使用して属性を初期化することもできます.以下は小さな例です.
class Student{
public:
//           
    Student(string name,int age,string phone):m_name(name),m_age(age),m_phone(phone){}

public:
    string m_name;
    int m_age;
    string m_phone;
};