繰り返しブレンドと演算子


📒 こんごうかんすう


メンバー関数ではありませんが、クラスの内部データにアクセスできます.
class myClass{
	friend void sub();  // 요게 friend
};

void sub()
{
	~~~
}
プロトタイプは内部で定義され、ボディは外部で個別に定義されます*

ハイブリッドクラス


同様に、クラス内のデータにアクセスできます.
class Employee{
	friend class Manager;
};

📒 繰り返し演算子


✔演算子重複フォーマット

반환형 operator연산자(매개변수 목록)
{
   ...
 }

重複演算子の実装方法


1.メンバー関数
2.非メンバー関数(friend)
演算子をメンバー、非メンバー関数として定義します.

1.算術演算

  • は、通常、非メンバー関数
  • として定義される.

    算術演算を実現するメンバー関数

    class myClass{
    public:
        int a;
        myClass(int num): a(num){};
    	myClass operator+(const myClass& cls);
    }
    
    myClass operator+(const myClass& cls){
    	myClass obj(a + cls.a);
        return obj;
    }

    算術演算を実現する非メンバー関数

    class myClass{
    	publid:
        int a;
        myClass(int num): a(num){};
    	friend myClass operator+(const myClass& cls1, const myClass& cls2);
    }
    
    myClass operator+(const myClass& cls1, const myClass& cls1){
    	myClass obj(cls1.a + cls2.a);
        return obj;
    }

    2.割当て操作(=)

  • メンバー関数として定義
    割り当て演算子のパラメータは、通常、オブジェクトの参照定数です.
    これは、コードがオブジェクトにすぎないか、定数ではない可能性があるからです.
  • 割当て演算を実装するメンバー関数

    class myClass{
    	publid:
        int a;
        myClass(int num): a(num){};
        myClass operator=(const myClass& cls);
    }
    
    myClass& operator=(const myClass& cls){
    	this->a = cls.a;
        return *this;
    }
  • コンパイラがパラメータを変換できるようにするには、割当演算子はメンバー関数である必要があります.
  • 賦値演算子はレジストリを返します.付与演算子は連続的に適用できるためです.
    ex) a1 = a2 = a3;
  • 3.関係演算(=,!=)

  • 非メンバー関数
  • として定義する.
    class myClass{
    	publid:
        int a;
        myClass(int num): a(num){};
    	friend bool operator==(const myClass& cls1, const myClass& cls2);
    }
    
    bool operator==(const myClass& cls1, const myClass& cls1){
    	return cls1.x == cls2.x
    }

    4.<,>>演算


    ストリームオブジェクト
  • に戻る必要があります.
  • 現在のオブジェクトのconstオブジェクトを受信する必要があります.
  • 非メンバー関数として作成する必要があります
    オブジェクトをメンバー関数として定義した場合、<<左側にオブジェクトが必要な場合はエラーです.
    class myClass{
    	publid:
        int a;
        myClass(int num): a(num){};
    	friend ostream& operator<<(ostream os,  const myClass& cls);
        friend istream& operator<<(istream is,  const myClass& cls);
    }
    
    ostream& operator<<(ostream os,  const myClass& cls){
    	os << cls.x << endl;
        return os;
    }
    
    istream& operator<<(istream is,  const myClass& cls){
    	is >> cls.x;
        return is;
    }
    タイプ変換

  • ≪作成者の変換|Convert Creator|Eas≫-パラメータを使用する作成者は、他のタイプをクラス・タイプに変更します.

  • 変換演算子-クラスタイプを自動的に別のタイプに変換します.
  • 変換作成者
    class book{
    public:
    int isbn;
    string title;
    book(){
    	isbn = 0;
        string = "unknown";
    }
    
    book(int isbn){
        this->isbn = isbn;
        this->title  = "unknown";
    }
    int main(
    book b1 = 9123232;
    }

    📒 変換演算子

    class book{
    	public:
        int isbn;
        string title;
    
    	book(){
        	isbn = 0;
            string = "unknown";
        }
        book(int isbn){              ## 변환 생성자
        	this->isbn = isbn;
        	this->title  = "unknown";
        }
        operator int() const{        ## 변환 연산자
        	return isbn;
         }
    }
    
    
    int main(
    	book b1 = 91823213;
        int isbn = b1;
       }